2017-03-15 6 views
0

私のデータが異なる基準に適合する私のテーブルのケースの数に関するメトリクスを取得したいと思います。現在、特定の基準に基づいて検査したい3+のグループがあります。当分の間、私は以下を数えたいと思っています: CHESS = Whiteの3+のグループ内のレコードの内訳。 DATE「%16」のような3+のグループ内のレコードの破壊 等チェス=白とDATEのすべての組み合わせで3+のグループ内のレコードの内訳「%16」グループ内のすべてのケースを選択するにはどうすればいいですか?

+------------------------------------------------+ 
| GroupID | CHESS | DATE | 
| 1  | White | n16  | 
| 1  | Black | n16  | 
| 1  | Black | n03  | 
| 2  | White | n16  | 
| 2  | White | n10  | 
| 2  | White | n11  | 
| 3  | Black | n12  | 
| 3  | White | n14 | 
| 3  | Black | n16  | 
--------------------------------------------------- 

3 = 1

の1 = 2

チェス・カウント= 0

2のチェス数の

チェス数:出力は何かのようになります1のチェス数と1 = 1

ケースの日付カウントを有する3 = 0

ケース1 = 2

日カウント= 1

2の日数の

日数2のチェス・カウントと3のチェス数及びCHと3 = 0

ケースの日付カウントが2 = 0

ケースの日数とESSの1の数とチェスの1の数とチェス2のカウント、カウント1 = 0

ケースの日付と回数3 = 0

事件の日とカウント2 = 1

ケースの日チェス2のカウントとカウント数の日付チェス3の数と数の日付チェス3の数と数日で1 = 1

ケース付き3 = 0

ケース付き2 = 0

これは、どのサイズのグループを考慮に入れるか、グループサイズに固有のものでなければなりませんか?(例えば、クエリは3つのグループでのみ動作します)あなたがgroup by cubeなどを使用して、ここのようにそれを行うことができ

+0

@ user7002207予想される出力に矛盾があります。グループ1とグループ2にそれぞれ1人と3人の白人がいます。グループ3に1つの日付があります。 – KindaTechy

+0

私は意図したものを間違えたかもしれません。 Ultimatley、私はいくつかのグループがどれくらいの白、1、白、2白などを含んでいるか知っています。また、1つの白と1のn16、2の白と1のn16など – user7002207

答えて

0

with groups as (select count(case when chess = 'White' then 1 end) cnt_white, 
         count(case when tdate = 'n16' then 1 end) cnt_n16 
        from t group by groupid), 
    numbers as (select level grp from dual connect by level <= 3) 
select white, n16, cnt 
    from (
    select n1.grp white, n2.grp n16, count(cnt_white) cnt, grouping_id(n1.grp, n2.grp) gid 
     from numbers n1 
     cross join numbers n2 
     left join groups on n1.grp = cnt_white and n2.grp = cnt_n16 
     group by cube(n1.grp, n2.grp) 
     having grouping_id(n1.grp, n2.grp) <> 3) 
    order by case when gid = 1 then 1 when gid = 2 then 2 when gid = 0 then 3 end, white, n16 

rextester demo

グループの数を変更するには、サブクエリnumbersでレベル3を変更します。

関連する問題