我试图根据两个字段仅选择具有最高 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/