- ベストアンサー
データの件数を集計してTOPを取得するためのSQL
- データの件数を集計して、もっとも件数が多いものを抽出するSQLを教えてください。
- 特定のテーブルにクエリを発行して、最も多い交通手段を使用する人を抽出する方法について教えてください。
- 上記のテーブルから、最も多い交通手段を使用する人の名前と回数を抽出するクエリを教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
訂正です。 select 名前,交通手段,件数 from ( select @rnk:= if( @access<=>交通手段, @rnk+1, 1 ) as rnk, 名前, @access:=交通手段 as 交通手段, 件数 from ( select 名前, 交通手段, count(*) as 件数 from テーブル group by 名前,交通手段 order by 交通手段 desc,件数 desc,名前 ) T cross join ( select @access:=null, @rnk:=0 ) as dummy ) S where rnk = 1 order by 名前,交通手段;
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
ざっとフローどおりやるとこんな感じでいけます。 もう少し効率的な書き方がありそうな気もしますが・・・ SELECT MIN(名前) AS 名前,交通手段,回数 FROM( SELECT 名前, 交通手段, COUNT(*) AS 回数 FROM テーブル GROUP BY 名前, 交通手段 HAVING (交通手段,回数) IN( SELECT 交通手段,MAX(回数) FROM ( SELECT 交通手段, COUNT(*) AS 回数 FROM テーブル GROUP BY 名前, 交通手段 ) AS SUB GROUP BY 交通手段 ) ) AS SUB2 GROUP BY 交通手段,回数
お礼
誠にありがとうございます。 前質問がかなりスマートに書けてしまったことから こちらもかなりスマートに書けるのかと思ってしまいましたが、やはり長くなってしまうのですね。 SQL は難しい。。。 ともあれ、本当にありがとうございました。 ベストアンサーはレスポンスが早かった #1 の方に差し上げますが、こちらの方法も勉強になります。 実際のテーブルはもう少し複雑なため、このやり方を参考にしつつ進めます。
- nora1962
- ベストアンサー率60% (431/717)
select 名前,交通手段,件数 from ( select @rnk:= if( @name<=>名前, @rnk+1, 1 ) as rnk, @name:=名前 as 名前, 交通手段, 件数 from ( select 名前, 交通手段, count(*) as 件数 from テーブル group by 名前,交通手段 order by 名前 desc,交通手段 desc ) T cross join ( select @name:=null, @rnk:=0 ) as dummy ) S where rnk = 1 order by 名前,交通手段
お礼
誠にありがとうございます。 前質問がかなりスマートに書けてしまったことから こちらもかなりスマートに書けるのかと思ってしまいましたが、やはり長くなってしまうのですね。 SQL は難しい。。。 ともあれ、本当にありがとうございました。 レスポンスが早かったので、とっかかりができて非常に助かりました。 実際のテーブルはもう少し複雑なため、このやり方を参考にしつつ進めております。