SQL 选择计数最高的行

标签 sql sql-server tsql

我试图根据两个字段仅选择具有最高 COUNT() 的行。

首先,我有一个查询,该查询提供特定 ITEM-SUPPLIER 组合在我的表中出现了多少次的值。

select itemid, ordersupplierid, COUNT(OrderSupplierId) AS SupCount from purchaseorderline
group by itemid, ordersupplierid
order by ItemID

在我的结果中:

itemid   | ordersupplierid | SupCount
15850    |  579            |  1
15850    |  587            |  3
15850    |  605            |  2
15851    |  616            |  5
15852    |  579            |  1
15852    |  587            |  2
15854    |  616            |  11
15855    |  616            |  1

所以从那里我只需要获取行:

itemid   | ordersupplierid | SupCount
15850    |  587            |  3
15851    |  616            |  5
15852    |  587            |  2
15854    |  616            |  11
15855    |  616            |  1

如在具有最高 SupCount 的 ItemId - OrderSupplierId 组合中。

有人知道如何做到这一点吗?将不胜感激。

最佳答案

您可以使用窗口函数:

select itemid, ordersupplierid, supcount
from (select itemid, ordersupplierid, count(*) AS SupCount,
             max(count(*)) over (partition by itemid) as maxcount
      from purchaseorderline
      group by itemid, ordersupplierid
     ) io
where supcount = maxcount
order by ItemID;

如果有联系,那么这将返回所有匹配的行。如果您只想要一行(即使有并列),那么您可以使用 row_number():

select itemid, ordersupplierid, supcount
from (select itemid, ordersupplierid, count(*) AS SupCount,
             row_number() over (partition by itemid order by count(*) desc) as seqnum
      from purchaseorderline
      group by itemid, ordersupplierid
     ) io
where seqnum = 1
order by ItemID;

关于SQL 选择计数最高的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49129965/

相关文章:

sql - 如何在sql server中进行交易技术分析计算?

sql - Postgresql: DROP CONSTRAINT IF EXISTS 不工作

sql - 连接到数据库失败。汤姆猫 Apache

python - 操作数类型与参数化 UPDATE 查询冲突

sql-server - 即使条件不成立,T-Sql 似乎也在评估 "If"语句

sql - 由两个不同的 GROUP BY 求和

mysql - SQL COUNT 来自另一个表的行

mysql - 如何在 zend framework2 的 mysql 查询中使用 YEAR(date)

php - 如何按热门/上升职位订购

sql-server - 如何正确处理 UTF-8 XML 中的 ?