
カウント結果を1レコードの中で横に並べたい
以下のテーブルを、
test_table
id group name
1 100 テスト1
2 100 テスト1
3 100 テスト1
4 200 テスト1
5 200 テスト1
6 200 テスト2
7 200 テスト2
8 200 テスト2
9 200 テスト2
nameごとのカウント、更に100だけのカウント、200だけのカウントといったように、
以下のように横に並べることは可能でしょうか?
name 合計 100計 200計
テスト1 5 3 2
テスト2 4 0 4
まず、nameごとの合計を取得するクエリを作って、
それに、100計列、200計列の部分をサブクエリでもってきたのですが、
これで動くには動くんですが、このやり方しかないものでしょうか。
ご教示おねがいします。
SELECT t.name, COUNT(*) as '合計',
(SELECT COUNT(*) FROM test_table as t1 WHERE t1.name = t.name AND t1.group = '100' ) as '100計',
(SELECT COUNT(*) FROM test_table as t1 WHERE t1.name = t.name AND t1.group = '200' ) as '200計'
FROM test_table as t
WHERE 1
GROUP BY t.name;
No.2ベストアンサー
- 回答日時:
groupのカラムに入る値が分かっているのであれば
case文を使うとパフォーマンスにも優れると思います。
case文を使うと条件によって出力する値を変える事ができます。
SELECT
name,
COUNT(*) AS total,
SUM(CASE
WHEN group='100' THEN 1
ELSE 0
END) AS count_100,
SUM(CASE
WHEN group='200' THEN 1
ELSE 0
END) AS count_200
FROM
test_table
GROUP BY
name;
(※上記のSQLはインデントを付けるために全角のスペースを使っています。コピペをする際は削除して下さい。)
参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
1万件レコードがあった時に10秒くらいかかってたのが0.1秒になりました!
こういった方法というか発送もあるんですね。ありがとうございます!
No.1
- 回答日時:
ピボットテーブルを使うやり方があります。
create temporary table temp (num int,`合計` int,`100計` int,`200計` int);
insert into temp values(100,1,1,0),(200,1,0,1);
select name,sum(合計*c) as 合計,sum(100計*c) as 100計,sum(200計*c) as 200計
from temp inner join
(select `group`,name,count(*) as c from test_table group by `group`,name) as sub
on `group`=num group by name;
※groupは予約語です、なるべく使うのを避けてください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
チェックボックスの項目をDBにi...
-
SQL文で右から1文字だけ削除す...
-
使うべきでない文字。
-
MySQL のデータからドロップダ...
-
実績累計の求め方と意味を教え...
-
決定性有限オートマトン
-
エクセルデータの末尾の改行を...
-
レコード長を数えてくれる関数
-
【SQL】existsでの商演算
-
DataGridViewにてセル以外をク...
-
ワードの差込印刷で教えて下さ...
-
select文でフリーズします。
-
ACCESS VBA レコードセットの参...
-
SELECTで1件のみ取得するには?
-
カレントレコードが無い事を判...
-
DAO、ADOについて
-
改行コード
-
ACCESSのクエリで同じSQL文だが...
-
こういうDELETE文を作成したい...
-
アクセス クエリ-で空白以外の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
使うべきでない文字。
-
【初歩】ラジオボタンをつかっ...
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
sum()の出力結果順に並び替えを...
-
MySQLで MAX()とGROUP BYを使う...
-
チェックボックスの項目をDBにi...
-
割合(パーセント)を求めるに...
-
SQLの集計で「全て」の合計も表...
-
表示幅を短くしたい
-
ビット演算
-
検索機能で条件を指定しない場...
-
月別、販売員別の集計がわかり...
-
Update文の書き方について
-
UNIONについて
-
[初心者]A表の2つの値からB表...
-
MySQLのクエリについて
-
今週の日曜日から土曜日までの...
-
初心者Mysqlの関数のsubstring...
-
カウント結果を1レコードの中...
おすすめ情報