Mysqlに関する質問です。


■やりたいこと
同一テーブルから別条件でデータを取得したいのですが、うまく実現できませんでした・・・。
具体的には、下記のようなテーブルから
---------------------------
ID | ユーザ | 体重 | 日付
---------------------------
1 | 1 | 50 | 20日
---------------------------
2 | 1 | 49 | 21日
---------------------------
3 | 2 | 60 | 20日
---------------------------
4 | 3 | 55 | 22日
---------------------------

以下のような表を抽出できれば・・・と頭を悩ませています。
---------------------------
ユーザ | 20日 | 21日 | 22日
---------------------------
1 | 50 | 49 | NULL
---------------------------
2 | 60 | NULL | NULL
---------------------------
3 | NULL | NULL | 55
---------------------------
そもそも出来るのかどうかも含めてご教授いただけないでしょうか。
よろしくお願い致します。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/10/26 19:45:05

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

SUMを使ってるのでNullではなくゼロになってしまうけど、

そこのところはphpとかのほうでゼロは空白に置き換えるなどの処理をすればいいと思うので・・・

SELECT `ユーザ`
    , SUM(CASE WHEN `日付` = '20日' THEN `体重` ELSE 0 END) AS `20日`
    , SUM(CASE WHEN `日付` = '21日' THEN `体重` ELSE 0 END) AS `21日`
        中略
    , SUM(CASE WHEN `日付` = '31日' THEN `体重` ELSE 0 END) AS `31日`
FROM `テーブル`
GROUP BY `ユーザ`;


訂正です

すみません

SELECT `ユーザ`
    , SUM(CASE WHEN `日付` = '20日' THEN `体重` END) AS `20日`
    , SUM(CASE WHEN `日付` = '21日' THEN `体重` END) AS `21日`
        中略
    , SUM(CASE WHEN `日付` = '31日' THEN `体重` END) AS `31日`
FROM `テーブル`
GROUP BY `ユーザ`;
id:oriennto55

まさかこんなにすぐに回答をいただけるとは・・・。

教えていただいた方法で、無事に解決することができました。

SQLにCASE式という便利な技があることを初めて知りました。

(完全に勉強不足です。。)

本当にありがとうございましたっ!

2011/10/26 19:44:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません