- 締切済み
SQLでの検索の仕方をご教示ください。
以下のような表があります。 カテ 年 上下期 売り上げ ------------------------ A 2011 1 10 A 2011 2 12 A 2012 1 9 A 2012 2 11 B 2011 1 11 B 2011 2 15 B 2012 1 8 B 2012 2 10 ここからsqlを使ってどの年のどのカテゴリの年間総売上が一番多いかを結果として出したいです。 なので カテ 年 総売上 ---------------- B 2011 26 という結果が欲しいのですがどうすればよいですか? SUMを使って年間の総売上は出せるのですがそこからMAXを使っても上のような結果がでません。 またカテゴリに関係なく総売上(A+B)が一番多い年を出すにはどうしたらよいですか? よろしくお願いします。 なんかうまく表のスペースが反映されなくて見難くてすみません。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- hatena1989
- ベストアンサー率87% (378/433)
> TOP句がうまく機能しないんです・・・。 あっ、しまった。昇順ですので総売上が一番小さいのが表示レさてしまいますね。 ORDER BY句を降順に変更してください。 ORDER BY 総売上 DESC;
- hatena1989
- ベストアンサー率87% (378/433)
こんな感じかな? SELECT TOP 1 カテ, 年, 総売上 FROM ( SELECT カテ, 年, Sum(売り上げ) AS 総売上 FROM テーブル名 GROUP BY カテ, 年 ) ORDER BY 総売上; って、ANo.1さんのヒントをそのままSQLにしただけですが。 ANo.2 だと、上位1件に絞り込めないと思います。
- SherlockHolmes2
- ベストアンサー率40% (175/429)
select カテ , 年 , max(uri) from ( select カテ , 年 , sum(売上) as uri from table group by カテ , 年 ) group by カテ , 年 select 年 , max(uri) from ( select 年 , sum(売上) as uri from table group by 年 ) group by 年 こんな感じでしょうか。 未検証です・・スミマセン。
お礼
回答ありがとうございます。 お礼が遅れてすみません。 これは試してみたのですがトップ1が出てきませんでした。 でもできればmaxを使って出したかったので参考になりました。 ありがとうございます:)
- STICKY2006
- ベストアンサー率29% (1536/5269)
こんちは。 全部教えたら面白くないと思うので構文はご自身でどうぞ。 >>SUMを使って年間の総売上は出せるのですがそこからMAXを使っても上のような結果がでません。 んー。そこまで行ってるなら、「総売上」でソートかけて、上位1レコード(top句)だけ取得すればいいんじゃないかと。 >>総売上(A+B)が一番多い年を出すには 上の奴が出来ているなら、「group by」句は使ってますよね? 「年」でgroup byして、総売上のソートを行うだけ。 ですよ。
お礼
回答ありがとうございます。 お礼が遅れてすみません。 TOP句というものの存在を知りませんでした! 調べてみて使ってみたのですが、どうもうまくいきません・・・。 書き忘れてしまったのですがUbuntuのDB2を使っています。 何か関係あるのでしょうか・・・。
お礼
回答ありがとうございます。 お礼が遅れてすみません。 No.1さんのお礼にも書きましたが TOP句がうまく機能しないんです・・・。 でもFROMの所に()を使って条件を書けることを知らなかったので すごく参考になりました。ありがとうございます。