質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Amazon Redshift

Amazon Redshiftは、Amazon社が提供する 高速かつ完全マネージド型でペタバイト規模の クラウドデータウェアハウスサービスです。

Q&A

解決済

1回答

2043閲覧

sqlで集計をしたい

kkkkkkkkkkkkl

総合スコア1

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Amazon Redshift

Amazon Redshiftは、Amazon社が提供する 高速かつ完全マネージド型でペタバイト規模の クラウドデータウェアハウスサービスです。

0グッド

0クリップ

投稿2020/06/24 01:28

編集2020/06/24 02:17

前提・実現したいこと

sql(Redshift)の初心者です。集計について教えてください。

会員数と売上を店舗、EC、店舗+ECの3つに分けて集計したいのですが
店舗+ECの集計に苦戦しております。

■テーブル

kaiinno salesstore SKU salesamt2 discount3 1 9999 みかん 100 50 2 1111 みかん 100 50 3 2222 りんご 300 30 4 3333 すいか 600 0 4 9999 すいか 600 10

※9999のみECでその他は店舗での購入としたい
※店舗コード salesstore
■実現したいこと
チャネル 会員数 売上
EC 
店舗
EC+店舗

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

該当のソースコード

SELECT COUNT(DISTINCT kaiinno) AS 会員数, COUNT(sku)AS SKU, SUM(salesamt2 + discount3) AS 売上, CASE salesstore WHEN '9999' THEN 'EC' ELSE '店舗' END AS チャネル FROM saleswithcustomers GROUP BY (CASE salesstore WHEN '9999' THEN 'EC' ELSE '店舗' END)

試したこと

ROLLUPやCUBEを試しましたがエラーが出てしまいました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。
Redshift

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2020/06/24 01:59

>会員ID 店舗コード アイテム 売上 とSELECT文の列名が結びつかないので、上記の列をCREATE TABLE の列名と同じもので書いては?CREATE TABLE 文も載せては? 店舗コードに全角文字と半角文字が混在しているのはおかしくないですか? [Amazon Redshift]タグを追加しては?存在しないタグは追加依頼します。https://teratail.com/help#add-tag
kkkkkkkkkkkkl

2020/06/24 02:09

ありがとうござます。SELECT分と列名を間違えておりました。申し訳ありません。 修正いたしました。
Orlofsky

2020/06/24 02:12

>CASE salesstore WHEN '9999' THEN 'EC' ELSE '店舗' END とあるのにデータは9999 で表示されています。 9999 と 9999 は別の値だと理解できないとプログラマーをやるのは難しいです。テーブルの内容の表示も https://teratail.com/help/question-tips#questionTips3-7 の [コード] に修正しては? それと、CASEを無用なかっこでくくるのは止めましょう。
kkkkkkkkkkkkl

2020/06/24 02:17

コードに修正しました。使い方教えていただきありがとうございます。
sazi

2020/06/24 04:10

どんなエラーですか?
kkkkkkkkkkkkl

2020/06/24 04:43

返信ありがとうございます。以下エラーです。色々調べてみたのですが集計方法がわからず なにを利用すればいいか教えていただけると助かります。 SQLエラー [500310] [42883]: [Amazon](500310) Invalid operation: function cube(text) does not exist;
sazi

2020/06/24 04:58 編集

cube(text) does not exist となっていますが、質問にあるSQLで出たエラーでしょうか? →失礼。質問のSQLではどんな問題があるのでしょうか?
kkkkkkkkkkkkl

2020/06/24 05:51

質問に記載したSQLではEC+店舗の合計を出すことができないのです。
guest

回答1

0

ベストアンサー

残念ながら、ROLLUPCUBEも2020-06-22の時点でRedshiftがサポートしていません。

WITHUNIONを活用すれば大丈夫です。

sql

1WITH 2ec_or_store_agg AS 3( 4SELECT 5 COUNT(DISTINCT kaiinno) AS 会員数, 6 COUNT(sku) AS SKU, 7 SUM(salesamt2 + discount3) AS 売上, 8 CASE salesstore WHEN '9999' THEN 'EC' ELSE '店舗' END AS チャネル 9FROM saleswithcustomers 10GROUP BY (CASE salesstore WHEN '9999' THEN 'EC' ELSE '店舗' END) 11), 12 13ec_and_store_agg AS 14( 15SELECT 16 SUM(会員数) AS 会員数, 17 SUM(SKU) AS SKU, 18 SUM(売上) AS 売上, 19 'EC+店舗' AS チャネル 20FROM ec_or_store_agg 21GROUP BY (SELECT 1) -- 全てを一つGROUPにする 22) 23 24SELECT * FROM ec_or_store_agg 25UNION 26SELECT * FROM ec_and_store_agg 27;

投稿2020/06/24 05:13

編集2020/06/24 13:14
YufanLou

総合スコア463

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kkkkkkkkkkkkl

2020/06/24 05:52

ありがとうございます。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問