- ベストアンサー
カウント結果を1レコードの中で横に並べる方法とは?
- カウント結果を1レコードの中で横に並べたい方法を教えてください。
- test_tableのnameごとにカウント結果をまとめ、100と200のカウントを横に並べる方法を教えてください。
- 現在のクエリで動作はするが、他にもっと良い方法はないか教えてください。
- みんなの回答 (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はインデントを付けるために全角のスペースを使っています。コピペをする際は削除して下さい。)
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
ピボットテーブルを使うやり方があります。 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は予約語です、なるべく使うのを避けてください
お礼
ありがとうございます。参考になりました。 ただ、テンポラリ作る方法は、あとあとのメンテで分かりづらくなってしまうなぁ。
お礼
1万件レコードがあった時に10秒くらいかかってたのが0.1秒になりました! こういった方法というか発送もあるんですね。ありがとうございます!