• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:group byを使う時に条件をつけたいです。)

group byを使って条件付きでデータを取得する方法

このQ&Aのポイント
  • group byを使って条件付きでデータを取得する方法について説明します。
  • テーブルの特定のカラムの値に基づいてgroup byを適用する方法を知りたいです。
  • 例えば、カラム'id'が特定の値の場合のみカラム'name'をgroup byする方法を教えてください。

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

  • ベストアンサー
回答No.1

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ありそうですが(´・ω・`)

noname#256090
質問者

お礼

ありがとうございました 助かりました

その他の回答 (3)

  • t-ka
  • ベストアンサー率28% (14/50)
回答No.4

私は下記の様に考えます。 (1) カラム"id"が0の時は、カラム"name"のgroup byせず   SELECT  WHERE (2) カラム"id"が1の時だけ、カラム"name"のgroup byする   SELECT  GROUP BY  HAVING (1)文 UNION(ALL)(2)文 各構文を参照してください。

noname#256090
質問者

お礼

ご回答ありがとうございます。 問題は無事解決できました。

noname#256686
noname#256686
回答No.3

下記のように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;

noname#256090
質問者

お礼

tsuyshさんご回答ありがとうございます。 問題は無事解決できました。

回答No.2

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

noname#256090
質問者

お礼

mogura_198さんご回答ありがとうございます。 問題は無事解決できました。

関連するQ&A