这是我目前的陈述:
SELECT
COLUMN1,
COLUMN2,
COLUMN3,
COLUMN4,
COLUMN5,
COUNT(*) COUNTER
FROM
TABLE
GROUP BY
GROUPING SETS ((COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5), COLUMN1);
之前我从未使用过GROUPING SETS,所以我不确定我是否正确使用它们,但我的输出看起来正确。但我想要的是我想通过我的小计COUNTER和我的COLUMN1订购。我目前的输出如下:
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
按小计COUNTER从最小到最小,然后按COLUMN1排序。
答案 0 :(得分:1)
您可以使用MAX功能作为分析功能来订购结果。
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;
您还可以更改ORDER BY以调整结果的排序方式。
我上周刚刚撰写了一篇关于GROUP BY和相关函数的文章,可能会有所帮助:Oracle GROUP BY – The Complete Guide。我必须更新它以添加此订购功能。