这是我当前的语句:
SELECT
COLUMN1,
COLUMN2,
COLUMN3,
COLUMN4,
COLUMN5,
COUNT(*) COUNTER
FROM
TABLE
GROUP BY
GROUPING SETS ((COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5), COLUMN1);
我以前从未使用过分组集,因此我不确定我是否正确使用它们,但我的输出看起来正确。但是我缺少的是我想在我的小计数器下订购,然后用我的列1订购。我当前的输出如下:
COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5 COUNTER
TEST0 TEST1 TEST3 TEST3 TEST4 1
TEST0 1
TEST TEST TEST TEST TEST 1
TEST TEST1 TEST1 TEST1 TEST1 1
TEST TEST2 TEST2 TEST3 TEST4 1
TEST 3
TEST2 TEST3 TEST4 TEST5 TEST6 1
TEST2 1
我想要的输出是:
COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5 COUNTER
TEST TEST TEST TEST TEST 1
TEST TEST1 TEST1 TEST1 TEST1 1
TEST TEST2 TEST2 TEST3 TEST4 1
TEST 3
TEST0 TEST1 TEST3 TEST3 TEST4 1
TEST0 1
TEST2 TEST3 TEST4 TEST5 TEST6 1
TEST2 1
由小计对抗最小的序列,然后由第1列。
您可以将最大函数用作分析功能来订购结果。
SELECT
COLUMN1,
COLUMN2,
COLUMN3,
COLUMN4,
COLUMN5,
COUNTER
FROM (
SELECT
COLUMN1,
COLUMN2,
COLUMN3,
COLUMN4,
COLUMN5,
COUNTER,
MAX(counter) KEEP (DENSE_RANK FIRST ORDER BY counter DESC) OVER (PARTITION BY first_name) AS maxcount
FROM (
SELECT
COLUMN1,
COLUMN2,
COLUMN3,
COLUMN4,
COLUMN5,
COUNT(*) AS COUNTER
FROM
TABLE
GROUP BY GROUPING SETS ((COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5), COLUMN1)
)
)
ORDER BY maxcount DESC, COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5;
您还可以通过调整订购结果的方式来更改订单。
上周我刚刚写了一篇有关群组和相关功能的文章,这可能会有所帮助:Oracle Group by - 完整指南。我必须更新它以添加此订购功能。