MySQL 3.23で、SQL構文に関してのご質問です。
salesテーブル
----|----------|-----|----
id staff_id price flg
---------------------------
1 tanaka 1000 a
2 yamada 2000 a
3 tanaka 500 b
4 tanaka 1000 b
上記のような感じで、行いたい出力は各スタッフID毎に
価格の合計を出したいのですが、flgでa、b別々の合計を出したいのです。
----------|------|------|
staff_id sum_a sum_b
----------|------|------|
yamada 2000 0
tanaka 1000 1500
という感じです。
a,bのフラグがなければ、gropu byで上手くいくのですが、
合計の条件が分かれる時どうすればいいか困っています。
ご存知の方よろしくお願いします。
答え:
例えばこんな感じ
SELECT staff_id,
SUM(IF(flgID='a', price, 0)),
SUM(IF(flgID='b', price, 0))
FROM sales GROUP BY staff_id ORDER BY staff_id;
SQLですべてやらずに
SELECT staff_id, flgID, SUM(price) FROM sales
GROUP BY staff_id, flgID
で集計した結果を他の言語で振り分けがほうが効率的かもしれません。
#MySQLならテンポラリーテーブルだろとか...
#UNIONで無理やりという方法も考えられるかも
補足の質問:
この構文はMySQL 3.23でも動作しました。
MYSQL でIFを使ったことなかったので、すごく勉強になりました。
おかげで処理が格段に早くなりました。
他に回答してくださった方もありがとうございました。この質問・回答は役に立ちましたか?
答え:
古いバージョンでは、もしかするとエラーになるかも知れませんが。。。
select
staff_id,
ifnull(sum(case flg when 'a' then price end),0) as sum_a,
ifnull(sum(case flg when 'b' then price end),0) as sum_b
from sales
group by staff_id
order by staff_id desc
;
ウェブサイトのユーザーによる情報ポスト、JPQA.comのない保証の正しさ.