SQL选择计数最高的行
我试图根据两个字段仅选择计数最高()的行 首先,我有一个查询,它给我一个特定的ITEM-SUPPLIER组合在我的表中出现了多少次的值SQL选择计数最高的行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图根据两个字段仅选择计数最高()的行 首先,我有一个查询,它给我一个特定的ITEM-SUPPLIER组合在我的表中出现了多少次的值 select itemid, ordersupplierid, COUNT(OrderSupplierId) AS SupCount from purchaseorderline group by itemid, ordersupplierid order by ItemID 在结果中,我有: itemid | ordersupplierid | SupC
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
正如在ItemId-OrderSupplierId组合中一样,SupCount最高
有人知道怎么做吗?非常感谢。您可以使用窗口功能:
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\u number()
:
我建议使用窗口功能:
WITH cte AS(
select itemid, ordersupplierid, COUNT(OrderSupplierId) AS SupCount
from purchaseorderline
group by itemid, ordersupplierid
order by ItemID
),
cteFilter AS(
SELECT itemid, ordersupplierid, SupCount, ROW_NUMBER() OVER (PARTITION BY itemid ORDER BY SupCount DESC) rn
FROM cte
)
SELECT itemid, ordersupplierid, SupCount
FROM cteFilter
WHERE rn = 1
WITH cte AS(
select itemid, ordersupplierid, COUNT(OrderSupplierId) AS SupCount
from purchaseorderline
group by itemid, ordersupplierid
order by ItemID
),
cteFilter AS(
SELECT itemid, ordersupplierid, SupCount, ROW_NUMBER() OVER (PARTITION BY itemid ORDER BY SupCount DESC) rn
FROM cte
)
SELECT itemid, ordersupplierid, SupCount
FROM cteFilter
WHERE rn = 1