SQLで、あるグループの集計を行う方法
以下のようなテーブルがあったときに、りんごもしくはぶどうを買ったとき日だけの
合計金額を出したいのですが、どのようにすればよろしいのでしょうか。
テーブルイメージ
--------------------------
購入日 購入者 購入品 金額
20160101 a りんご 100
20160101 a みかん 10
20160102 a りんご 100
20160102 a りんご 100
20160103 a みかん 10
20160103 a みかん 10
20160101 b ぶどう 50
20160101 b みかん 10
20160102 b ぶどう 50
20160102 b ぶどう 50
20160103 b みかん 10
20160103 b みかん 10
--------------------------
アウトプットイメージ
--------------------------
購入日 購入者 合計金額
20160101 a 110
20160102 a 200
20160101 b 60
20160102 b 100
--------------------------
■お願いしたいこと
①例では「購入品」の種類は全3品、合計する条件の「購入品」は2品ですが、
「購入品」の種類が無数あり、合計する条件の「購入品」も複数であった場合でも対応できるような方法で教えていただきたいです。
②データベースはPostgreSQLを使用していますが、汎用的なSQLでお願いしたい。
③基本的に1発のSQLで表形式で帰ってくるSQLの書き方でお願いしたい。
Excelや複数回SQLを行う方法は、出来るだけなしにしてもらいたい。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
汎用性はやってみないとわかりませんが、サブクエリを利用すればこんな感じでしょうか
//元データ
create table tbl(d date,person varchar(20),fruit varchar(20),amount int);
insert into tbl values
('2016-01-01','a','りんご',100),
('2016-01-01','a','みかん',10),
('2016-01-02','a','りんご',100),
('2016-01-02','a','りんご',100),
('2016-01-03','a','みかん',10),
('2016-01-03','a','みかん',10),
('2016-01-01','b','ぶどう',50),
('2016-01-01','b','みかん',10),
('2016-01-02','b','ぶどう',50),
('2016-01-02','b','ぶどう',50),
('2016-01-03','b','みかん',10),
('2016-01-03','b','みかん',10);
//集計
select t1.d,t1.person,sum(amount) as amount
from tbl as t1
inner join
(select distinct d,person from tbl
where fruit in ('りんご','ぶどう')
) as t2
on t1.d=t2.d and t1.person=t2.person
group by d,person
order by person,d;
早速ありがとうございます!無事できました。
りんごとぶどうを買った日だけ残して、合計すればよかったんですね。勉強になりました!ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
- Excel(エクセル) グループの最後の行に書式、計算式なども同じ行を追加するマクロを教えてもらえませんか。 7 2022/05/18 10:13
- SQL Server SQL 期間内の実施数を合計したい 2 2023/03/03 22:28
- アクセサリ・腕時計 代行購入(報酬あり)について質問です。 ある方より、ロレックスの時計を代理購入したら数万円の手当を即 3 2022/07/06 20:23
- その他(資産運用・投資) idecoではなりませんが、企業確定拠出年金に加入しています。 毎月の購入する運用商品を4種類、スイ 2 2023/03/18 09:58
- アクセサリ・腕時計 ロレックスの腕時計は値下がりしないって本当ですか? 10 2022/04/18 07:01
- その他(ネットショッピング・通販・ECサイト) Utme!について質問です。Tシャツを購入したく、後払い選択をしたのですが何度やってもエラーが出てし 1 2022/09/04 12:37
- 不動産投資・投資信託 投資信託 信託報酬について 4 2022/11/13 13:06
- 数学 期待値について 12 2022/10/12 19:02
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カテゴリと個別商品の集計SQLに...
-
SQLです!!教えてください。あ...
-
timestampのデータはどのように...
-
pandasでsqlite3にテーブル作成...
-
既存テーブルにカラム追加でサ...
-
PostgreSQL serial型の質問
-
コマンドプロンプトのエラー
-
集計でテストの各教科の最高得...
-
AccessとSQL Serverの連携について
-
SQLです!!教えてください。あ...
-
フラグをたてるってどういうこ...
-
timestamp が空のデータを除い...
-
sqlの副問合せについて
-
【SQL】他テーブルに含まれる値...
-
【sqlite3】deleteしても.dbフ...
-
エクセルvbaでpostgresに接続を...
-
【VB】セルが空になるまで処理...
-
selectの単純繰り返し
-
Excel VBAのユーザーフォームで...
-
下記の問合せを行うクエリを、 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
case whenとsum関数の併用について
-
UNION ALLでつなげた複数ビュー...
-
CASE文内での計算
-
文字列の集計的な結合(文字列の...
-
SQLで、あるグループの集計を行...
-
小数点のある数値で整数部のみ...
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
スキーマ
-
sqlに記述できない文字
-
オラクルのUPDATEで複数テーブル
-
Accessで今日から5日後
-
timestampのデータはどのように...
-
UPDATEで既存のレコードに文字...
-
pandasでsqlite3にテーブル作成...
-
テーブル名が可変の場合のクエ...
-
PostgreSQLのtimestamp型で時間...
-
truncate tableを使って複数の...
-
IDとパスワードについて。
おすすめ情報