- ベストアンサー
group byを使って条件付きでデータを取得する方法
- group byを使って条件付きでデータを取得する方法について説明します。
- テーブルの特定のカラムの値に基づいてgroup byを適用する方法を知りたいです。
- 例えば、カラム'id'が特定の値の場合のみカラム'name'をgroup byする方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
SET @row_no:=1; SELECT name ,COUNT(id) AS count_id ,id ,name ,IF(id=1,0,@row_no:=@row_no+1) AS row_no FROM `test` GROUP BY row_no ,name これでいかがでしょうか、、もっとスマートなsqlありそうですが(´・ω・`)
その他の回答 (3)
- t-ka
- ベストアンサー率28% (14/50)
私は下記の様に考えます。 (1) カラム"id"が0の時は、カラム"name"のgroup byせず SELECT WHERE (2) カラム"id"が1の時だけ、カラム"name"のgroup byする SELECT GROUP BY HAVING (1)文 UNION(ALL)(2)文 各構文を参照してください。
お礼
ご回答ありがとうございます。 問題は無事解決できました。
下記のようにUNIONを使うとスマートかもですね。 select name, 1 as id, count(*) as count from test where id=1 group by name union all select name, id, 1 as count from test where id=0;
お礼
tsuyshさんご回答ありがとうございます。 問題は無事解決できました。
- はせがわ もぐら(@mogura_198)
- ベストアンサー率66% (14/21)
setで行に連番ふらなくてもrand()使えばなんとなく行けますね。set使いたくない場合はこっちでもいいかもです。ただ結果の保証がうーん・・・ですが。 SELECT name ,COUNT(id) AS count_id ,id ,name ,IF(id=1,0,RAND()) AS row_no FROM `test_3` GROUP BY row_no,name
お礼
mogura_198さんご回答ありがとうございます。 問題は無事解決できました。
お礼
ありがとうございました 助かりました