如何为此查询编写正确的分区[重复]

问题描述 投票:0回答:1

我们有这种格式的数据。

item     club    dc     
1         2      100
1         3      100
1         4      200
1         5      200
1         6      200
1         7      300

2         3      100
2         4      200
2         5      200
2         6      200

我需要的是,对于每个项目,对所有俱乐部进行明智的计数。 回应应该是:

item dc   club_count
1    100   2
1    200   3
1    300   1
2    100   1
2    200   3

我尝试了基本的

select item,dc, count(dc) over(partition by dc) from table
,但给出了完全错误的答案。我还需要按 cloub_count 按项目进行排序。所以最终的结果应该是这样的:

item     dc   club_count
    1    200   3
    1    100   2
    1    300   1
    2    200   3
    2    100   1
sql sql-server database aggregate-functions partition-by
1个回答
1
投票

这里只需要一个简单的聚合,不需要窗口函数:

SELECT item, dc, COUNT(*) AS club_count
FROM yourTable
GROUP BY item, dc
ORDER BY item, dc;

如果你真的想使用窗口函数来做到这一点,你可以尝试:

WITH cte AS (
    SELECT item, dc, COUNT(*) OVER (PARTITION BY item, dc) club_count
    FROM yourTable
)

SELECT DISTINCT item, dc, club_count
FROM cte
ORDER BY item, dc;
© www.soinside.com 2019 - 2024. All rights reserved.