質問: mysql Client API version 3.23.49 PHP/4.4.5 で動作させようと思っています。 table a b 1 2 3 4 2 4 7 1 2 6 1 6 上のデータから以下のような結果を得たいのですが table a b idcount1 1 6 2 3 4 1 2 6 2 7 1 1 グループで集計をとり、その上でbに6がある場合は6その他は bの値にNULLもしくは別の値が入るという形でいいのですが・・・ できません。 SELECT a, b, count( * ) AS idcount1 FROM table GROUP BY a するとはじめに読みこんだ値がbには入ってしまいます。 結果 table a b idcount1 1 2 2 3 4 1 2 4 2 7 1 1 SELECT a, b, count( * ) AS idcount1 FROM table where b=6 GROUP BY a するとbの値ははじきますし、カウントしている意味がなくなります。 結果 table a b idcount1 1 6 1 2 6 1 GROUP BY 処理前のソートを考え、from table後に oder by b=6 asc を使ったがエラー 末尾に oder by b=6 asc を使うと最初に試した値をソートするだけでした。 宜しくお願いいたします。
回答: 特定キーでgroup by した場合は、集計関数をつかわない別キーの値は 保障されません。(自信ないけどそんな感じだったはず) 3.23系ですよね?一度テンポラリにおとすといいのではないでしょうか? テーブル名にtableという予約語をつかうとエラーになりますので 運用には注意が必要です。 CREATE TEMPORARY TABLE t2 SELECT DISTINCT a,b FROM `table` WHERE b=6; SELECT t1.a,t2.b, count( * ) AS idcount1 FROM `table` as t1 LEFT JOIN t2 ON t1.a=t2.a GROUP BY a