GROUP BYによるデータの圧縮をしたい
やりたいことは下記のようなデータの圧縮です。
日付 | 伝票番号 | オーダー | 金額 |
---|---|---|---|
3/1 | 1111 | 牛丼 | 380 |
3/1 | 1111 | 豚汁 | 100 |
3/1 | 1112 | カレー | 700 |
3/1 | 1112 | コーヒー | 200 |
3/2 | 1211 | つけ麺 | 400 |
3/2 | 1211 | 味たま | 50 |
3/3 | 1311 | ピザ | 1000 |
3/3 | 1311 | ポテト | 300 |
⬇︎
日付 | 伝票番号 | オーダー | 金額 |
---|---|---|---|
3/1 | 1111 | 牛丼 , 豚汁 | 480 |
3/1 | 1112 | カレー , コーヒー | 900 |
3/2 | 1211 | つけ麺 , 味たま | 450 |
3/3 | 1311 | ピザ , ポテト | 1300 |
該当のソースコード
SELECT '日付','伝票番号','オーダー',SUM('金額') FROM table GROUP BY '日付','伝票番号'
発生している問題
「オーダー」がなければ、上記の書き方ではうまく行くと思いますが、文字列が入ってくると機能しなくなるかと思います。
上記のような圧縮をするにはどのようにしたらよろしいでしょうか?
ネットで調べたのですが、うまく実行できるコードが見つかりませんでした。
補足情報(FW/ツールのバージョンなど)
AWSの環境でPythonを通してSQLの操作をしています。
AWSの環境でPythonを通して操作するSQLって
なにか所定のSQLなのでしょうか?
文字列の連結はSQLによってさまざまなので・・・
DBは何互換でしょうか?
PostgreSQL互換とかMySQL互換とか…。
蛇足ですが「データの圧縮」という言い方はあまり良くないです。行数は減りますが、情報量としては減ってしまいます。(金額が合計値になるので元のデータに戻せない)
一般的にこのような複数行を一つの結果にまとめる処理を「集約(aggregation)」といいます。
同じSQLでもデータベースやそのバージョンによって方言が大きいですから、どのデータベースを使うのかを質問のタグで明示したり、バージョンも明記した方が適切なコメントが付き易いです。SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう! https://www.ashisuto.co.jp/corporate/column/technical-column/detail/1197236_2274.html
SQLでは '文字列' とシングルクォートで囲むと文字列として扱われます。
'日付', '伝票番号', 'オーダー', '金額' はみな文字列です。
アドバイスをいただき、ありがとうございます。
言葉遣いにつきまして、大変勉強になりました。
DBが何互換かについてなんですが、実は把握できておりません。
先ほどMySQLのコードを試してダメだったので、それ以外かと思います。
もし、DBの環境を調べられる方法がありましたらぜひ教えていただけますと幸いです。
回答3件
あなたの回答
tips
プレビュー