SQL:查找表中列值最高的位置?

cam*_*lly 4 sql sql-server

我试图通过计算其项目ID的出现次数来查找表中最有序的菜单项.我尝试了一些不同的东西,但我很丢失.这产生了错误:

"聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用."

但是我认为它将我想要实现的目标放在一起:

SELECT count(itemCode) 
FROM OrderProcessing 
WHERE count(itemCode)=max(count(itemCode))
Run Code Online (Sandbox Code Playgroud)

ASh*_*ASh 5

I.原始查询的修改版本(@DanGuzman关于关系的评论后更新)

选择与最想要的项目具有相同计数的所有项目:

SELECT itemCode , count(*) as MaxCount
FROM OrderProcessing
GROUP BY itemCode
HAVING count(*) = 
-- count of most wanted item
(select top 1 count(*) 
 from OrderProcessing 
 group by itemCode 
 order by count(*) desc)
Run Code Online (Sandbox Code Playgroud)

II.查询以选择最有序的项目之一

SELECT top 1 itemCode --, count(*) as MaxCount  --optional
FROM OrderProcessing
GROUP BY itemCode
ORDER BY count(*) DESC
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 5

如果你想要一行,我建议order by

SELECT TOP 1 itemCode, count(itemCode)
FROM OrderProcessing
GROUP BY itemCode
ORDER BY count(itemCode);
Run Code Online (Sandbox Code Playgroud)

如果您想要所有项目具有最大计数,请使用WITH TIES

SELECT TOP 1 WITH TIES itemCode, count(itemCode)
FROM OrderProcessing
GROUP BY itemCode
ORDER BY count(itemCode);
Run Code Online (Sandbox Code Playgroud)

如果你想要更花哨,可以使用窗口函数。这是一个例子:

SELECT itemCode, cnt
FROM (SELECT itemCode, count(itemCode) as cnt,
             MAX(count(itemCode)) OVER () as maxcnt
      FROM OrderProcessing
      GROUP BY itemCode
     ) op
WHERE cnt = maxcnt;
Run Code Online (Sandbox Code Playgroud)