データベースの環境はOracle 11gとなります。
前提・実現したいこと
現在下記のようなテーブルにて、カウント数ごとのデータを取得したいと考えています。
具体的には、1つの下記のようにテーブルにカラムがあります。
テストテーブル
...............
ユーザーID
KJコード
PGコード
ステータスコード
..................
SQL
1CREATE TABLE TEST 2( 3 USER_ID VARCHAR(10) 4 ,KJ_CODE NUMBER 5 ,PG_CODE NUMBER 6 ,STATUS_CODE NUMBER 7);
このとき、ステータスコードには1~4のコードが登録されています。
SQL
1INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',1234,1111,1) ; 2INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',1234,1112,2) ; 3INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',1234,1113,3) ; 4INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',1234,1114,4) ; 5INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',1234,1115,1) ; 6INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',1234,1116,1) ; 7INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',1234,1117,2) ; 8INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',4321,1111,1) ; 9INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',4321,1112,1) ; 10INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',4321,1113,2) ; 11INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',4321,1114,2) ; 12INSERT INTO TEST(USER_ID, KJ_CODE,PG_CODE,STATUS_CODE ) VALUES ('0010',4321,1115,3) ;
そして、KJコードをGROUP BYで集約しつつPG_CODEをCOUNTした合計数と、
ステータスコード1~4のそれぞれのCOUNTした数をだし、
ステータスコード1~4それぞれのCOUNTした数とPG_CODEをCOUNTした数、
あるいはステータスコードの合計を例えば下記のように比較します。
ステータスコードの値1の合計数 > PG_CODEの合計数
ステータスコードの値1の合計数 < ステータスコードの値2の合計数
ステータスコードの値3の合計数 > 0
ステータスコードの値4の合計数 < PG_CODEの合計数
そのうえで最終的に、
ユーザーID、GROUP BYしたKJコード、CASEか何かで比較したステータスコード
のデータを取得したいです。
KJ_CODEごとにSTATUS_CODE の一番数が多いもの、あるいは1個以上ある場合など
例えば、サンプルデータでKJ_CODEが1234のとき、
status1の数が KJ_CODE(1234)のPG_CODE数より大きいとstatus1を表示
status2の数が1個以上のときはstatus2を表示、ということを想定しています。
発生している問題
初歩的で申し訳ありませんが、一つのテーブルでGROUP BYしつつ、
上記のように二つの列をカウントするような記述がよくわかっていません。
こういった場合は、やはり同一テーブルを副問い合わせなどするのでしょうか。
組み方、考え方をご教授頂けますと幸いです。
現在私自身は、下記のようなSQLの記述状況で手間取ってしまっています。
SQL
1SELECT 2,USER_ID 3,KJ_CODE 4,COUNT(PG_CODE) 5,COUNT(STATUS_CODE) 6FROM 7TEST 8GROUP BY 9KJ_CODE
回答3件
あなたの回答
tips
プレビュー