gpt4 book ai didi

sql - T-SQL 按问题分组

转载 作者:行者123 更新时间:2023-12-02 18:33:17 29 4
gpt4 key购买 nike

我遇到以下问题(或者可能只是思维障碍):

我有一个表格(实际上是表格的 View ),其中包含以下列和数据:

/image/n98Sw.png

现在我想按“Customer”列对这些数据进行分组,并获取具有最高“CompetitorCount”的“CompetitorName”。当然,我可以创建这样的查询:


SELECT 客户,MAX(CompetitorCount) FROM MyTable GROUP BY 客户

这将返回两行:

Foo; 12  
Bar; 7

但我无法通过这种方式获得 CompetitorName。如果我将其包含到分组部分中,“客户”将出现多次。否则我必须使用聚合函数来选择我想要使用的“CompetitorName”,但当然 MAX 不起作用。

我确信这可以通过某种方式完成,但目前我不知道如何实现。

预先感谢您的帮助。

最佳答案

select customer, competitorname, competitorcount
FROM
(
select *, rn = ROW_NUMBER() over (
partition by customer order by competitorcount desc)
from tbl
) X
WHERE rn=1

如果您想在最大值处显示 TIES,请将 ROW_NUMBER() 更改为 RANK()。

您甚至可能会发现交叉应用版本更快,但它不适用于平局。如果竞争对手之间存在平局,TOP 1 确保单一记录。

select C.*
FROM
(select distinct customer from tbl) A
cross apply
(select top 1 B.*
from tbl B
where A.customer = B.customer
order by B.competitorcount desc) C

它首先选择所有不同的客户。然后,对于每个客户,它都会检索该客户的 MAX(competitorcount) 记录。

关于sql - T-SQL 按问题分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4778271/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com