SQL-在分组集中按小计数订购



这是我当前的语句:

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 - 完整指南。我必须更新它以添加此订购功能。

相关内容

  • 没有找到相关文章

最新更新