• ベストアンサー

月ごとの集計について

以下のようなテーブルで月毎の集計を1回のSQLで取得する方法はありますでしょうか。 ----------------------- 日付 |商品番号|価格 ----------------------- 2006/07/01|001 |\210 2006/07/02|012 |\350 2006/07/05|003 |\100 2006/06/01|014 |\120 2006/06/09|014 |\120 よろしくお願いします。

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

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

価格は、「\」記号付きで「文字」として格納する訳ではないですよね? ■表定義&データ例 create table t1 (日付 date, 商品番号 dec(3), 価格 int); insert into t1 values ('2006-07-01',001,210), ('2006-07-02',012,350), ('2006-07-05',003,100), ('2006-06-01',014,120), ('2006-06-09',014,120); ■検索SQL例 select year(日付) as 年,month(日付) as 月,sum(価格) as 価格合計 from t1 group by 年,月 order by 年,月;

pokapoka1980
質問者

お礼

回答感謝です。 年月を出して、group byで絞り込めば良いんですね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQL 集計について

    集計方法がどうしてもわからないのでご教授ください。 下記のテーブルを持っています。 テーブル1では日々の売上金額を管理し、 テーブル2では一週間の日付が保存されています。(月曜日~日曜日) -------テーブル1-------           日付    売上金額   2013/09/01     3000   2013/09/02     4000   2013/09/03     2000    ・              ・           ・           2013/09/30     1000 ----------------------- --------テーブル2---------  日付(月)    日付(日)    2013/08/26   2013/09/01 2013/09/02   2013/09/08    ・        ・    ・       2013/09/30   2013/10/06 ------------------------- テーブル1とテーブル2の情報をもとに テーブル3にある、日付(月)と日付(日)は、テーブル2から持ってきて、 一週間の集計を行いたいと思っております。 --------------テーブル3--------------  日付(月)    日付(日)    売上金額 2013/08/26  2013/09/01     3000 2013/09/02  2013/09/08     6000   ・   ・   ・ 2013/09/30  2013/10/06     1000 ------------------------------------ このようにするにはどのようなSQLを組めばいいのでしょうか? SQL初心者のため、難しい単語などを使わずに ご説明をしていただければと思います。 どうぞ、よろしくお願いいたします。

  • 集計をしたい

    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の組み方をすればよいのか見当もつかず悩んでおります。 どなたかご教授頂ける方がいらっしゃいましたら、よろしくお願い致します。

  • SQLで集計について分からないことがあります。

    SQLで集計について分からないことがあります。 まず、次のようなテーブルがあったとして 日付  店舗コード ブランドコード 金額 ---------------------------------------- 09-01 | 401101 | 01 | 10000 09-02 | 401101 | 01 | 20000 09-03 | 401101 | 01 | 30000 09-04 | 401101 | 01 | 40000 09-01 | 401101 | 02 | 10000 09-02 | 401101 | 02 | 20000 09-03 | 401101 | 02 | 30000 09-04 | 401101 | 02 | 40000 09-01 | 401101 | | 11111 09-02 | 401101 | | 22222 09-03 | 401101 | | 33333 09-04 | 401101 | | 44444 ブランドコードが'Null'の金額をブランドコードが'01'の金額に 日付をキーにして集計したいんですが、 可能でしょうか? なにか、良い方法があればお願いします。

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

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

  • 同一テーブル内のデータを比較条件で集計し表示するには?

    商品     価格 -------------------- 白米     15000 玄米     14000 なす      5000 きゅうり    3000 上記のようなテーブルから、 価格が10000までの商品点数、また10000~20000の 商品点数を一回のSQL文で取得できるようなクエリー を作りたいのですが、アドバイス頂けましたら幸いですm(__)m

  • MYSQLで月ごとの集計をおこないたい

    こんばんは。MYSQLのTABLE_Aに下記の3つのフィールドがあります。 日時(DATE),商品名(VARCHAR),売上(INT) 2010/01/01,商品A,100 2010/01/30,商品B,200 2010/03/10,商品C,300 2010/03/20,商品D,400 最終的に欲しいのは、1月は1月の集計(300)、3月は3月の集計(700)など、月でまとめたいと思っています。 groupでまとめるにも日付まではいっているので、月でまとめるにはどうしたらいいのか悩んでいます。よろしくお願いします。利用MYSQLは5.5です。

    • ベストアンサー
    • MySQL
  • SQLでグルーピングしてやや複雑な集計する方法

    SQLでグルーピングしてやや複雑な集計する方法 こういうことってやりたい時あるよなーと思いつつ いい方法が思い浮かばないので質問させてください。 日付ごとにタイプなどの条件により集計して、 1行で1日分のデータを並べて出力したいと思っています。 とりあえずイメージを提示します。 テーブルイメージ -------------------------- 日付     額 タイプ 20090101  5000  1 20090101  1000  1 20090101  3000  2 20090101  2000  2 20090101  -200  4 20090101  3000  4 20090101  2000  4 20090102  1000  1 20090102  1000  2 20090102  1000  2 20090102  -100  4 20090102  4000  4 20090102  3000  4 -------------------------- 出力イメージ ----------------------------------------------------- 日付   タイプ1 タイプ2 タイプ4(正) タイプ4(負) 20090101   6000   5000   5000   -200 20090102   2000   2000   7000   -100 ----------------------------------------------------- 複問い合わせを駆使すればできるような気もするのですが、 日付で集計しなければならないところが難しく感じています。 合計が0(というか対象データが無い場合)の部分は空白でもかまいません。 データベースはOracleですがOracleだけでしか使えない特殊な機能ではなく 普通のSQLの組み合わせで解決したいと思っています。 (でもOracle固有の機能で解決できるのならそれも教えていただきたいです) 基本的に1発のSQLで表形式で帰ってくるSQLの書き方をお願いします。 できれば、SQLそのものを記述していただきたいです。 何回かSQLを発行してあとでエクセルで…とか、他のPG言語でなんとかする という方法は今回はいりません。 よろしくお願いします。

  • 集計のSQLについて

    皆さんの知恵をお借りしたいと思っています。 どなたか、良い案がある方お願いいたします。 以下のテーブルがあります。 (売上テーブル) 品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   40    Bさん 鉛筆   30    Bさん 鉛筆   30        鉛筆   10        上のテーブルで、品名・購入者を集計キーとして、 金額を集計したい場合、 SELECT 品名,購入者,SUM(金額) FROM 売上テーブル GROUP BY 品名,購入者  というSQL文で,   品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   70    Bさん 鉛筆   40        という結果が得られると思いますが・・・、 これを、 品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   70    Bさん 鉛筆   30        鉛筆   10        という結果になるようなSQL文を作りたいのです。 購入者が入っているものについては、品名・購入者で集計して、 購入者が空欄のものは集計しないようにしたいと思っています。 UNIONを使えばできるとは思うのですが、 それ以外の方法で、1回のSQL文でできる方法があれば知りたいと思っています。 よろしくお願いします。

  • Excelで月ごとの集計を間に入れたい

    1行目に日付があり、別シートの入力項目で入れられた年月の1日を開始日として 横に連続して日付が進んでいるシートがあります やりたいことは、月ごとの集計なのですが 集計の列を各月の最終日の直後に入れないといけない事です まとめて最後に持ってくるとか、別シートに集計表とするなら ピボットテーブルも使えそうですが、今回の要望では使えません しかも 何月を入れられ羽化わからないため、列が可変長となります つまり 2月は28日か29日、その他の月は30日か31日で、 一番目指したいスタイルとしては・・・ 2月28日 2月29日 集計 3月1日 3月2日 ~~ 3月31日 集計 4月1日 ~~ ですが、日付が存在しなければスグに集計を持ってくると言うのは 不可能と考えますので、31列固定で考えて 2月28日 2月29日 空欄 空欄 集計 3月1日 3月2日 ~~ 3月31日 集計 4月1日 ~ でも構いません それにしても、計算の結果、月が変われば空欄にして、集計の直後から改めて翌月から はじめるということは、どのような操作で可能となるでしょうか? どだい、集計を間に挟む事自体無理がありますでしょうか?

  • 売上日より小さく且つ最大日の抽出

    以前こちらで商品の価格変更に対応するため履歴テーブルの作成を教えていただきました。作成したテーブルは以下のようなものです。 商品番号,価格,開始日,終了日 00000001,120,2006/01/01,9999/09/09 00000002,200,2006/01/01,2006/12/31 00000002,210,2007/01/01,9999/09/09 00000003,150,2006/01/01,2006/09/30 00000003,180,2006/10/01,9999/09/09 売上テーブルと履歴テーブルを使い売上金額を集計しています。 商品番号が複数存在する場合は売上日が開始日と終了日の間になる価格を取ってくるようにしています。 しかし現在、履歴テーブルの終了日は手入力しているため、この手間を省くため以下のようなテーブルへの変更を検討しています。 商品番号,価格,適用日 00000001,120,2006/01/01 00000002,200,2006/01/01 00000002,210,2007/01/01 00000003,150,2006/01/01 00000003,180,2006/10/01 このような履歴テーブルにした場合、商品番号が複数存在するときは売上日より小さく且つ最大日のものを抽出するようにしなければならないと思うのですが、うまくいかず売上日より小さい日付ものか最大日付のもののどちらかしか抽出できません。 どのようにしたらいいのでしょうか。 よろしくお願いします。

子連れが多い理由とは?
このQ&Aのポイント
  • 子連れでの外出が増えている理由や、その背景にある社会の変化を考える必要があります。
  • 子連れの人々にとっては、他の子連れの親との交流や情報共有が重要な要素となっています。
  • 子連れでの外出における悩みや困りごとを解決するための情報や支援サービスに対する需要も高まっています。
回答を見る