• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:カウント結果を1レコードの中で横に並べたい)

カウント結果を1レコードの中で横に並べる方法とは?

このQ&Aのポイント
  • カウント結果を1レコードの中で横に並べたい方法を教えてください。
  • test_tableのnameごとにカウント結果をまとめ、100と200のカウントを横に並べる方法を教えてください。
  • 現在のクエリで動作はするが、他にもっと良い方法はないか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • smileeeen
  • ベストアンサー率70% (21/30)
回答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/mysql_15.htm
karace
質問者

お礼

1万件レコードがあった時に10秒くらいかかってたのが0.1秒になりました! こういった方法というか発送もあるんですね。ありがとうございます!

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答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は予約語です、なるべく使うのを避けてください

karace
質問者

お礼

ありがとうございます。参考になりました。 ただ、テンポラリ作る方法は、あとあとのメンテで分かりづらくなってしまうなぁ。