
エクセルで作ったような単純な縦横型のリレーショナル構造だとして、各列の一番大きな値を赤文字にしたいと思っています。
このとき、
(1)1回のクエリで全体を取得し、連想配列などにいれて各列をソートして1番大きな値を探す
(2)必要な回数分、適したクエリを投げて、結果を変数に格納し、IDなどで一致させる
という二通りのやり方を考えたのですが、どちらが一般的でしょうか。
(1)の場合は、DBに負荷がかからなくていいのかなと思いますが、多彩なフィルタやソートを使わずに、DBを使う意味があるんだろうかと考えてしまいます。
(2)の場合、列数が多いと、たとえば今回は5列分の結果を取得しようと思っていますが、1ページを表示させるのに5回DBへのアクセスがあることになり、運用としてどうなんだろうと考えた次第です。
アクセス数などにもよるのかと思いますが、一般的にこうする、というのがありましたら教えていただければと思います。
もちろん(1)(2)以外の方法でも歓迎です。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
複数列というのがちょっと面倒なところですが
こんな感じでどうでしょう?
//元データ
CREATE TABLE tbl (id int not null primary key,d1 int,d2 int,d3 int,d4 int,d5 int,index(d1,d2,d3,d4,d5));
INSERT INTO tbl VALUES(1,1,2,3,4,2),(2,5,4,3,2,1),(3,4,2,1,5,3),(4,2,4,5,1,1),(5,3,2,1,1,2),(6,1,1,1,5,1),(7,2,3,1,5,1);
//集計
SELECT id
,d1,COALESCE((d1=m1),0) as f1
,d2,COALESCE((d2=m2),0) as f2
,d3,COALESCE((d3=m3),0) as f3
,d4,COALESCE((d4=m4),0) as f4
,d5,COALESCE((d5=m5),0) as f5
FROM tbl
LEFT JOIN (SELECT MAX(d1) as m1,MAX(d2) as m2,MAX(d3) as m3,MAX(d4) as m4,MAX(d5) as m5 FROM tbl) as sub
ON d1=m1 or d2=m2 or d3=m3 or d4=m4 or d5=m5
ORDER BY id
No.1
- 回答日時:
自分でしたら、以下のテーブルがあったとき、
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`value` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `test` (`id`, `value`)
VALUES
(1,10),
(2,20),
(3,29),
(4,3),
(5,28),
(6,18),
(7,11);
まず第一に試すのはこのクエリ
select
id
, value
, (value = (select max(value) from test)) as flg
from test
次に試すのがこの2つのクエリの組み合わせ。
select id, max(value) from test;
select id, value from test;
で、早い方を採用。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
何にかが違うから エラーなんで...
-
mysqlのupdate構文についての質...
-
SQLを作ったのですがうまくいき...
-
エラー 1068 (42000): 複数の主...
-
mysqlがインストールされている...
-
SQLで漢字名称を都道府県や市区...
-
#1062 - '0' は索引 'PRIMARY' ...
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
【初歩】ラジオボタンをつかっ...
-
あってますか?SQL
-
SQLです教えてくださいお願いし...
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SELECT * FROM `生徒名簿` INNE...
-
〜のような結果を出すためのSQL...
-
SQLです!!教えてください。あ...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysqlがインストールされている...
-
エラー 1068 (42000): 複数の主...
-
SQLでカラムを追加し、条件に合...
-
【初歩】ラジオボタンをつかっ...
-
テーブル名が可変の場合のクエ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
データベースの接続に失敗して...
-
下記の問合せを行うクエリを、P...
-
SQLです。こんな感じですか?あ...
-
mysqlのupdate構文についての質...
-
下記の問合せを行うクエリを、P...
-
MySQLでcreateが使えない MySQL...
-
utf8bomとutf8mb4の違いがいま...
-
SQLです教えてくださいお願いし...
-
mysqlがインストールされている...
-
MySQL NULLだけをカウントして...
-
うまくいきません教えてくださ...
-
SQLで日付別のIDを生成するには
-
SQLです教えてくださいお願いし...
-
SQLで漢字名称を都道府県や市区...
おすすめ情報