我试图通过计算其项目ID的出现次数来查找表中最有序的菜单项.我尝试了一些不同的东西,但我很丢失.这产生了错误:
"聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用."
但是我认为它将我想要实现的目标放在一起:
SELECT count(itemCode)
FROM OrderProcessing
WHERE count(itemCode)=max(count(itemCode))
Run Code Online (Sandbox Code Playgroud)
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)
如果你想要一行,我建议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)