下記のSQLは絞り込み条件を省略していますが、3つのテーブルを連結してテーブル3の特定の組織コードを持つレコードも抽出したいです。
テーブルの連結はあっていると思います。
SELECT COUNT(DISTINCT テーブル1.会員ID),(CASE WHEN '組織コード' = ANY(テーブル1.組織名) THEN '組織名'
ELSE 'その他' END) as ORGANIZATION
FROM テーブル1 INNER JOIN (テーブル2 INNER JOIN テーブル3 ON テーブル2.会員ID = テーブル3.会員ID)
ON テーブル1.会員ID = テーブル2.会員ID
GROUP BY CASE
WHEN '組織コード' = ANY(テーブル1.組織名)) THEN '組織名' ELSE 'その他' END;
ここにテーブル3の特定の組織コードを持つ人も足してカウントしたい場合はどのようにすればよいでしょうか?
SELECT COUNT(DISTINCT テーブル1.会員ID),(CASE
WHEN '組織コード' = ANY(テーブル1.組織名) OR '組織コード' = ANY(テーブル3.組織名)) THEN '組織名'
ELSE 'その他' END) as ORGANIZATION
FROM テーブル1 INNER JOIN (テーブル2 INNER JOIN テーブル3 ON テーブル2.会員ID = テーブル3.会員ID)
ON テーブル1.会員ID = テーブル2.会員ID
GROUP BY CASE
WHEN '組織コード' = ANY(テーブル1.組織名) OR '組織コード' = ANY(テーブル3.組織名)) THEN '組織名' ELSE 'その他' END;
としてもエラーとなってしまいます。すみませんがよろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
こんにちは。
提示されているSQLにテーブル3の条件を追加するということだけ重視してSQLを考えてみました。
テーブル2の条件などは提示されている結果を大きく崩さなければ、質問者様で追加が可能だと考えています。(提示されている情報が不足していることが、SQLに敢えて記述していない理由です)
以下前提
テーブル1またはテーブル3に特定のコードを持つ会員の数をカウントする。
特定のコードについて、テーブル1には配列型で保持しており、テーブル3はイベント履歴であり同一会員IDが複数登録される。
※テーブル1に登録のない会員IDはテーブル3やテーブル2には登録されない。
SQL
1select count(*), organization 2from ( 3 select * 4 , case when '組織コード'=any(組織名) 5 or exists(select 1 from テーブル3 where '組織コード'=組織コード and 会員id=t1.会員id) 6 then '組織名' else 'その他' end as organization 7 from テーブル1 t1 8) v1 9group by organization
投稿2017/08/26 04:22
編集2017/08/26 04:25総合スコア25138
0
サブクエリの件数を絞る様に変更しました。
sql
1create temp table テーブル1 (会員ID int,住所 text, 組織コード text[]); 2insert into テーブル1 values 3(1,'東京','{SS,PP,QQ,RR,TT,JJ}'), 4(2,'神奈川','{SR,LL,MM,KK,PP}'), 5(3,'千葉','{SS,PP,CC,ZZ}'), 6(4,'東京','{NO,PO,WO,HO}'); 7 8create temp table テーブル2 (会員ID int,アクションフラグ int); 9insert into テーブル2 values 10(1,0), 11(1,0), 12(3,1), 13(4,0); 14 15create temp table テーブル3 (会員ID int,組織コード text); 16insert into テーブル3 values 17(1,'SS'), 18(1,'SS'), 19(2,'SS'), 20(4,'KK'); 21 22SELECT ORG, COUNT(DISTINCT T1.会員ID) FROM 23 (SELECT ORG, 会員ID FROM 24 (SELECT 会員ID, UNNEST(t4.組織コード) ORG 25 FROM (SELECT t5.* FROM テーブル1 t5 26 JOIN テーブル2 t2 ON t5.会員ID=t2.会員ID AND t2.アクションフラグ='1' 27 WHERE 住所 IN ('東京','千葉') 28 ) t4 29 ) t0 WHERE ORG IN ('SS','PP','QQ','CC') 30 UNION 31 SELECT 組織コード, t6.会員ID FROM テーブル3 t6 32 JOIN テーブル2 t2 ON t6.会員ID=t2.会員ID AND t2.アクションフラグ='1' 33 WHERE 組織コード='SS' 34 ) t1 35GROUP BY 1;
投稿2017/08/23 11:01
編集2017/08/25 15:32総合スコア4070
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/24 05:14
2017/08/24 05:46
2017/08/24 07:34
2017/08/24 07:47
2017/08/24 07:51
2017/08/24 08:01
2017/08/24 09:30
2017/08/24 09:53
2017/08/24 09:54
2017/08/25 01:59
2017/08/25 03:13 編集
2017/08/25 03:29
2017/08/25 03:30
2017/08/25 03:38
2017/08/25 04:11
2017/08/25 04:24
2017/08/25 04:31
2017/08/25 06:17 編集
2017/08/25 06:55
2017/08/25 06:59
2017/08/25 07:21
2017/08/25 08:57
2017/08/25 09:02
2017/08/25 09:12
2017/08/25 09:20
2017/08/25 09:30
2017/08/25 09:32
2017/08/25 09:33
2017/08/25 09:34
2017/08/25 09:37
2017/08/25 11:55
2017/08/25 12:24
2017/08/26 01:11
2017/08/26 02:52
2017/08/26 03:30
2017/08/26 03:34
2017/08/26 03:52 編集
2017/08/28 02:06
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。