アンケート結果を集計する効率の良いシンプルなSQLを教えて下さい。
MySQLで、以下の状態です。
テーブル名:hoge
カラム:id,kbn
id...auto
kbn...1~5
欲しい結果は、以下の状態です。
順位,kbn,count
1位,5,60ポイント
2位,3,45ポイント
2位,1,45ポイント
4位,4,30ポイント
5位,2,10ポイント
※位やポイントはプログラム側で付与するので不要です。
2位の様に同点の場合は同じ順位を表示し、3位を飛ばし順位を表示させたく思います。
どうぞ、よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
手っ取り早いのは一度ビューを作ることです。
//準備
create table hoge(id int not null auto_increment primary key,kbn int);
insert into hoge(kbn) values(1),(2),(3),(4),(5),(1),(1),(2),(4),(5),(3),(1),(2),(5),(5),(3),(2),(1);
//ビューの作成
create view vhoge as select kbn,count(*) as cnt from hoge group by kbn;
//集計
select kbn,cnt,(select count(*)+1 from vhoge as v2 where v1.cnt<v2.cnt) as rank from vhoge as v1 order by rank asc;
※もしビューを使いたくないのであればビューに書いたのと同様のSQLをそのまま書きます
select kbn,cnt,(select count(*)+1 from (select kbn,count(*) as cnt from hoge group by kbn) as v2 where v1.cnt<v2.cnt) as rank from (select kbn,count(*) as cnt from hoge group by kbn) as v1 order by rank asc
yambejp 様
ご回答ありがとうございます。
教えて頂きました、SQL(今回はビューを使わないタイプを利用させて頂きました)で意図する動きのプログラムが実装出来ました。
サンプルデータまで、作成して頂き誠にありがとうございました。
教えて頂いたSQLを1つ1つを理解し、今後の勉強にも役立てていこうと思います。
本当にありがとうございました。
No.1
- 回答日時:
hogeテーブルにはカラムid,kbnしかありませんが
countはどうやって拾う仕様でしょうか?
例えばkbn=5がhogeテーブルに、60レコードあるということでしょうか?
その方法だとレコード数が0のデータは拾えませんが別途ユーザー(?)管理テーブルは
あるのでしょうか?
ランク付け自体は定番のSQLがありますので
countさえわかればそれほど難しくはないです
この回答への補足
ご回答ありがとうございます。
>例えばkbn=5がhogeテーブルに、60レコードあるということでしょうか?
お察しの通りでございます。kbnを引数にしinsertする仕様となっております。
kbn自体には、別途管理テーブルをもっていますが、今回はレコード数が0の場合は表示されなくても問題はありません。
情報が不足していて申し訳ありません。
SQLに関しては勉強中ですが急遽必要になってしまい、今の私の実力では実装できそうもありませんので、お手数ですが、お力添えを願いたく思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- Excel(エクセル) RANK.EQとCOUNTIFSの組み合わせで同ポイントの場合、違う条件を加えて順位を付けたい。 1 2022/08/30 19:49
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- 統計学 テストの順位についてです 今回のテストの順位を知りたいのですが、できますでしょうか?今回は僕の学年は 4 2022/11/30 19:15
- SQL Server SQL 期間内の実施数を合計したい 2 2023/03/03 22:28
- 高校 高校化学、気体、温度の有効数字 3 2023/04/02 11:39
- 統計学 投票のジレンマ。 3 2023/05/13 22:16
- Excel(エクセル) 非表示にしたい行をグループ化して折り畳み 4 2022/09/17 20:17
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
Access パラメータクエリをcsv...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
PL/SQLの変数について
-
バインド変数について
-
graphvizで到達矢印の位置を選...
-
SQL文のエラー
-
【MySQL】本当に困っています。...
-
エクセルの関数について教えて...
-
MySQLにてCOUNTした値を更にCOUNT
-
DataTableで重複行を削除したい
-
カラム名でseqとidではどちらが...
-
insertを高速化させたい
-
group by 関数で表示するカラム...
-
親と子供が複数のSQL取得方法
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
上位3位を求めるSQL文は?
-
LAST_INSERT_IDで同時にアクセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
select文のwhere句に配列を入れ...
-
selectした大量データをinsert...
-
センノシド異性体構造式
-
Unionした最後にGROUP BYを追加...
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
URL と行番号の指定
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
おすすめ情報