カテゴリと個別商品の集計SQLについて

このQ&Aのポイント
  • カテゴリと個別商品の集計SQLを考えています。
  • 月毎の値の集計やカテゴリ合計を計算する方法を教えてください。
  • クロス集計とサブクエリを使用して、求めたい結果を得ることはできるが、カテゴリ合計を計算する部分のSQLがわかりません。
回答を見る
  • ベストアンサー

カテゴリと個別商品の集計SQLについて

カテゴリと個別商品の集計SQLについて質問です。 postgresのバージョンは9.0です。 次のテーブルより ------------------------------------------ id  カテゴリ  商品名    日付       値 ------------------------------------------ 1  野菜    ホウレン草  2010-01-01  100 2  野菜    ホウレン草  2010-01-02  100 3  野菜    ホウレン草  2010-02-02  100 4  野菜    キャベツ    2010-01-02  200 5  肉      牛肉      2010-01-01  500 6  肉      牛肉      2010-01-02  500 -------------------------------------------- 下の結果を得るSQLを考えています。 月毎の値の集計 カテゴリ  商品名     1月  2月    合計   カテゴリ合計  カテゴリ合計と合計との差 ----------------------------------------------------------------------------- 野菜    ホウレン草   200  100    300    500        200 野菜    キャベツ     200    0    200    500        300 肉      牛肉      1000   0    1000   1000         0 ----------------------------------------------------------------------------- ここでカテゴリの合計とは 上の場合、 ホウレン草(300)+キャベツ(200)=カテゴリ野菜(500)、です。 クロス集計とサブクエリを使えば出来そうなのですが、カテゴリ合計を出す部分の SQLが思いつきません、よろしくお願い致します。

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

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

こんばんは。 多分postgresはウィンドウ関数が使えたはず・・・? select カテゴリ, 商品名, case when 日付が1月なら(ここの条件がわからん・・・) then 値 else 0 end as 1月, case when 日付が2月なら(ここの条件がわからん・・・) then 値 else 0 end as 2月, sum(値) over(partition by カテゴリ) as カテゴリ合計 以下略・・・ 最近postgresやってないので、SQL忘れた・・・。 考え方はあってると思いますが?

riskneu
質問者

お礼

Postgresのマニュアルでウィンドウ関数の項目を見てみました、目的の結果が得られそうです。ありがとうございました。

関連するQ&A

  • 集計をしたい

    SQLで集計をしたいです。 SQLを始めたばかりの者です。 下記、よろしくお願いします。 説明不足がありましたら、ご指摘をお願いします。 MS-SQLServer2005環境です。 下記の売上テーブルが存在します。 テーブル:UriageTBL 年月日 受注番号 商品コード 商品名 個数  単価  金額 20101001 100   300     リンゴ   1   100   100 20101001 110   400     バナナ   1   150   150 20101001 110   400     バナナ  -1   150  -150 20101001 120   500     キャベツ  1   120   120 20101002 130   500     キャベツ  1   120   120 20101002 140   600     レタス   1   110   110 20101002 140   600     レタス   1   110   110 20101002 150   400     バナナ   1   150   150 ----------------------------- 商品コードに対応する商品グループ(テーブルは存在しません) 商品コード 商品グループ 300     果物 400     果物 500     野菜 600     野菜 ---------------------------- 【結果】 年月日 商品グループ 受注件数 個数合計 金額合計 2010/10/01 果物       1     1     100 2010/01/01 野菜       1     1     100 2010/10/02 果物       1     1     150 2010/10/02 野菜       2     3     340 売上テーブル(UriageTBL)を、年月日別、商品グループ別に集計し、受注件数、個数合計、金額合計を取得したいです。 また、商品コードに商品グループテーブルが存在しない為、SQL内で設定します。 ただし、受注合計金額が0円の時は集計から外します。(受注番号110は集計から外します。) (受注件数は、受注番号の件数です。) 上記の場合、どのようなSQLの組み方をすればよいのか見当もつかず悩んでおります。 どなたかご教授頂ける方がいらっしゃいましたら、よろしくお願い致します。

  • Excelでこのような集計はどうしたらいいですか?困ってます!

    こんにちは。 以下のような集計を行いたいのですが、どうすればよいかわかりません。教えてください!! Sheet(1) A列、B列、C列 カテゴリ、数、品名 =================== 野菜、1、大根 野菜、2、ねぎ 果物、2、いちご 肉、3、牛肉 果物、1、りんご 肉、2、豚肉 ・ ・ ・ Sheet(2) A列、B列、 カテゴリ、金額 =================== 野菜、300 果物、300 肉、500 ・ ・ ・ 各品物は、100円均一とし、Sheet2でカテゴリ毎に必要な金額を求めます。Sheet1は、およそ1000行ほどあるので、一括で数式で求めたいのですが、どのような関数を使えばよいのかわかりません。 お願いします!

  • SQLでの集計方法について

    SQLでの集計方法がわからず質問をさせていただきます。 改版のたびに商品名を変える商品がたくさんあるとします。 (下記のような感じで、履歴番号が大きいほど新しい) 商品コード 履歴番号 商品名 123456    8    元祖○○ 123456    7    ○○外伝ターボ 123456    6    ○○外伝 123456    5    スーパー○○2 123456    4    スーパー○○ 123456    3    ○○3 123456    2    ○○2 123456    1    ○○ この場合に、各商品コードの履歴番号が最大(最新)の、 「商品コード」「改版履歴番号」「商品名」を取得するには どのようなSQLを作成すればいいでしょうか?

  • 集計のSQL文を教えてください

    集計で困っています。 助けてください。 uriage_date(date型) uriage_kingaku 2005/01/01 00:15   2000 2005/01/01 12:20   2500 2005/01/02 00:00   1000 ←ここは前日分(2005/01/01)に 2005/01/02 05:15   1800 2005/01/04 12:30   2300 ~ 2005/12/31 20:20   5000 2005/12/31 22:45   1200 上の様なテーブルから 売上合計(1月分) uriage_date     goukei_kingaku 2005/01/01      5500 2005/01/02      1800 2005/01/03      0 ~ 2005/01/31      9000 この様に1日毎(当日00:01~翌日00:00)の売上の合計金額 を一ヶ月単位で集計したいのですが、SQL文が解りません。 00:00の売上は前日の合計に入れたいです。 データの無い日も0円として欲しいです。 よろしくおねがいします。

  • EXCEL集計の方法で。。

    こんにちは。 EXCELの集計方法で質問なのですが、例えば、 A店、B店、C店、における1か月分の商品別売り上げ表があるとします(下記のような表) 店 日  物   個数 A店 10/1 トマト  2個 B店 10/1 キャベツ 1個 A店 10/1 キャベツ 1個 C店 10/2 トマト  3個 B店 10/4 キャベツ 4個 A店 10/4 きゅうり 1個 A店 10/4 キャベツ 2個 これを集計し、店別でしかも商品別の売り上げ個数を求めるのはどのようにしたら良いでしょうか?? 集計でグループ基準を店、集計方法を合計、集計するフィールドを個数にしてすると、下記のような問題が生じてしまします。 (1)同じ売り上げ日の同じ店の売り上げはTOTALされる。 (2)集計部分(太字の部分)に商品名が出てこない できれば、アウトライン2を使用して、集計結果を以下のようにしたいのです。 A店  トマト  2個 B店  キャベツ 5個 A店  キャベツ 3個 C店  トマト  3個 A店  きゅうり 1個    どなたか、お分かりになるかたいらっしゃいますでしょうか??長々と書いてしまいましたが、どうぞ よろしくお願い致します。

  • SQLの集計について教えてください。

    環境はoracle9iです。 ■テーブルの構成 |年度|月|部署コード|商品コード|金額| ■テーブルの内容 |2010|01|AAA|001|1000| |2010|02|AAA|001|2000| |2010|01|AAA|001|3000| |2010|01|AAA|002|3000| |2010|02|BBB|003|4000| |2010|01|CCC|001|5000| |2010|03|CCC|001|6000| 上記のようなテーブルがあり、 これを年度,月,部署コード,商品コードでサマリした値を表示したいです。 と、ここまでなら上の4つでGROUP BYしてあげれば良いのですが、 そこに年度,部署コード,商品コードでサマリした 「累計金額」列を加える必要があります。(イメージは下記のとおりです。) ■抽出結果の構成 |年度|月|部署コード|商品コード|金額|累計金額| ■抽出結果の内容 |2010|01|AAA|001|4000|6000| |2010|02|AAA|001|2000|6000| |2010|02|BBB|003|4000|4000| |2010|01|CCC|001|5000|11000| |2010|03|CCC|001|6000|11000| GROUP BYと別の集計単位で列を作ることが可能か、 可能であればどのようなSQLを書くべきか、 というところを教えてください。

  • 各グループごとの集計結果をクエリで求めたい

    Access2003のクエリについてです。 (1)のようなテーブルに対してして(2)のような結果を出したいのですが、集計結果の全レコードに対して、各該当するグループごとの集計結果がうまく計算できません。 [都道府県別合計],[商品ID別合計],[月度別合計]は一つのクエリの中で求められるものなのか、サブクエリで先に求めるものかどういう方法をとるのがいいのでしょうか? (1) 都道府県, 商品ID, 日付, 数量, 単価 (2) 都道府県, 商品ID, 月度:Format(日付,"yyyy/mm"), [都道府県別合計], [商品ID別合計], [月度別合計] (グループ化), (グループ化), (グループ化)

  • Excel集計方法を教えてください!

    以下のようなシートがあります。 シート(1) A列、B列、C列、D列、E列 品名、商品名、A店、B店、C店 --------------------- 果物、いちご、8個、7個、6個 果物、ぶどう、2個、8個、2個 野菜、大根、3個、3個、2個 野菜、人参、2個、5個、8個 野菜、白菜、1個、2個、0個 肉、牛肉、2個、5個、10個 それを、以下のシート(2)のように集計するには、 シート(2)の各B列、C列、D列にどのような数式を埋めればいいか教えてください!! シート(2) A列、B列、C列、D列 品名、A店、B店、C店 --------------------- 果物、10個、15個、8個 野菜、5個、10個、10個 肉、2個、5個、10個

  • ブログのカテゴリーを複数分けたい

    ブログの記事ごとのカテゴリーを複数に分けることは可能ですか? 例えば1つの記事の中に「豚肉」を使ったレシピと「キャベツ」を使ったレシピを書いたとします。 カテゴリーに「肉」と「野菜」のカテゴリー両方に加えることはできないのでしょうか? ちなみにFC2です。分かりにくい説明ですがよろしくお願いします。

  • SQL、特にOralce 8iに関して、データの集計に関する質問です。

    SQL、特にOralce 8iに関して、データの集計に関する質問です。 以下のようなデータがあったとします。 [開始年月(int)]  [終了年月(int)]  [値] 201001      201004      1 201003      201007      2 201005      201010      3 201007      201101      4 このとき以下のような感じで、重複している月で値を合算し、一番値が大きな月を求めるには、どうすればよいでしょうか。 1 2 3 4 5 6 7 8 9 101112 (月) ■■■■________ __■■■■■_____ ____■■■■■■__ ______■■■■■■ ↓↓↓↓↓↓↓↓↓↓↓↓ 1 1 3 3 5 5 9 7 7 7 4 4 (計) ←この場合 7月が一番大きかった できればPL/SQLなしで解決したいと思っております。 ご教示お願いいたします。