首页 > 解决方案 > SQL group-n-result (count, max, group)

问题描述

使用 SQL (Redshift) 我试图计算,并返回组中每个项目的最大值。我尝试了许多示例,但没有一个产生我想要的输出。这是我所追求的一些示例数据和结果。

数据

Container,fruit
box1, apple
box1, apple
box1, apple
box1, apple
box1, banana
box2, blueberry
box2, blueberry
box2, strawberry
box3, apple
box3, apple
box3, blueberry

查询结果

Container, fruit, count
box1, apple, 4
box2, blueberry,2
box3, apple, 2

我一直在尝试一些示例,但几个小时都没有到达任何地方,因此非常感谢您的帮助。

标签: sqlgroup-bycountmaxamazon-redshift

解决方案


我们可以在这里使用窗口函数:

WITH cte AS (
    SELECT Container, fruit, COUNT(*) AS cnt,
           ROW_NUMBER() OVER (PARTITION BY Container
                              ORDER BY COUNT(*) DESC) rn
    FROM yourTable
    GROUP BY Container, fruit
)

SELECT Container, fruit, cnt
FROM cte
WHERE rn = 1;

这里的逻辑是按容器GROUP BY水果进行基本的聚合查询,以找到每个组的计数。在 CTE 中,一路上,我们还拿起了一个行号,这次只按容器分区,按计数降序排列。


推荐阅读