我想获得表格中我的数据符合不同标准的案例数量的指标。目前,我有3个以上的团体,我们希望根据某些标准进行检查。目前,我想了解以下几点: CHESS = White的3+组记录的细分。 DATE如'%16'的3+组记录的细分 在3+组中的记录细分,包括国际象棋的所有组合=白色和DATE,如'%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 |
---------------------------------------------------
输出类似于:
国际象棋数量为1 = 2
国际象棋数量为2 = 0
国际象棋数量为3 = 1
日期计数1 = 2
日期计数2 = 1
日期计数3 = 0
国际象棋计数为1且日期计数为1 = 1的案例
国际象棋计数为2且日期计数为2 = 0的案例
国际象棋数为3且日期数为3 = 0的案例
国际象棋计数为1且计数日期为2 = 1的案例
国际象棋计数为1且计数日期为3 = 0的案例
国际象棋计数为2且计数日期为1 = 0的案例
国际象棋计数为2且计数日期为3 = 0的案例
国际象棋数为3且计数日期为1 = 1的案例
国际象棋计数为3且计数日期为2 = 0的案例
这可以通过考虑任何大小的组的方式来完成,还是必须特定于组大小(例如,查询仅适用于3组)?
答案 0 :(得分:0)
您可以使用group by cube
和其他人在此处执行此操作:
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 强>
修改子查询3
中的级别numbers
以更改组数。