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

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

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

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

Q&A

解決済

3回答

704閲覧

SQL クロス集計の処理の流れ

sysder

総合スコア25

SQL

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

0グッド

0クリップ

投稿2018/08/01 14:34

tableAをクロス集計するとどのような経過を経て最終結果になるのか知りたいです。

tableA

dtvallabel
1/11A
1/15B
1/22A

まず以下のコードで

lang

1select dt from tableA

以下になる(うまく表になりませんでした…)

dt
1/1
1/1
1/2
次に以下のコードなのですが
```lang-sql
select dt,
max(case when label = 'A' then val end) as A

from tableA

以下になるのでしょうか。 |dt|A| |:--|:--| |1/1|1| |1/1|| |1/2|2| また、次のコードで ```lang-sql select dt, max(case when label = 'A' then val end) as A, max(case when label = 'B' then val end) as B from tableA

以下になるのでしょうか。

dtAB
1/11
1/15
1/22

最後にgroup byをして

lang

1select dt, 2 max(case when label = 'A' then val end) as A, 3 max(case when label = 'B' then val end) as B 4from tableA 5group by dt

最終結果が得られる、であってますでしょうか。

dtAB
1/115
1/22

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

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

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

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

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

guest

回答3

0

エラーということは処理は存在しません。その存在しないものを定義したって意味が無い。

投稿2018/08/01 15:34

編集2018/08/01 15:38
sazi

総合スコア25173

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

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

sysder

2018/08/03 13:23

ご回答ありがとうございます。 確かにおっしゃる通りです。
guest

0

ベストアンサー

最後のSELECTが

DT A B ------ ------------- ------------- 1/1 1 5 1/2 2

となり、グループ関数MAX を使っているのに GROUP BY が抜けている上の2つのSELECTはエラーになります。

どのデータベースを使うのかを質問のタグで明示した方が適切なコメントが付き易いです。 SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう!

SQLを実行できる環境は用意しましょうね。

投稿2018/08/01 14:55

Orlofsky

総合スコア16415

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

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

sysder

2018/08/01 15:18

ご回答ありがとうございます。 redshiftを使ってます。 もちろんgroup byをしないとエラーになるのですが、 処理の流れの理解があっているのか知りたかったです。
Orlofsky

2018/08/01 15:47

[Amazon Redshift]タグを追加しては? カラムとグループ関数を問合せる時は、カラム毎に(今回はMAXを)取得するという意味でGROUP BYでどのカラム毎かを明示してあげなければなりません。
sysder

2018/08/03 13:32

redshiftのタグがないかと思ってました。amazonが頭に付くんですね。 select で選ぶのはカラム(列)なのですが、カラム同士が一行一行どのように連携しているのかいまいち理解できてないようです。 適当にカラムを選択しても行方向がうまく一致しないと表にはならないので。
guest

0

SQLの種類によって多少書き方がかわってきますが

SQL

1create table tbl(dt date,val int,label varchar(10),unique(dt,label)); 2insert into tbl values 3('2018-01-01','1','A'), 4('2018-01-01 ','5 ','B'), 5('2018-01-02 ','2 ','A');

dtとlabelの組み合わせがユニークであれば

SQL

1select dt 2,sum(val*(label='A')) as A 3,sum(val*(label='B')) as B 4from tbl 5group by dt

もうちょっとちゃんと書くと

SQL

1select dt 2,sum(val*(case when label='A' then 1 else 0 end)) as A 3,sum(val*(case when label='B' then 1 else 0 end)) as B 4from tbl 5group by dt

データがないときに0ではなくnullにしたいとか
A,B・・・は自動で枠ができてほしいとか
要望によっては工夫が必要

投稿2018/08/02 05:25

編集2018/08/02 05:25
yambejp

総合スコア114779

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

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

sysder

2018/08/03 13:32

ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問