Sql 无法对包含聚合或子查询的表达式执行聚合函数-错误
我在从数据库中获取最畅销的产品时遇到问题。这是我尝试过的代码:Sql 无法对包含聚合或子查询的表达式执行聚合函数-错误,sql,sql-server,Sql,Sql Server,我在从数据库中获取最畅销的产品时遇到问题。这是我尝试过的代码: SELECT productid FROM soldvia GROUP BY productid HAVING SUM(noofitems) = (SELECT MAX(SUM(noofitems)) FROM soldvia GROUP BY productid); 我得到这个错误: 味精130,第15级,状态1,第
SELECT productid
FROM soldvia
GROUP BY productid
HAVING SUM(noofitems) = (SELECT MAX(SUM(noofitems))
FROM soldvia
GROUP BY productid);
我得到这个错误:
味精130,第15级,状态1,第68行无法对包含聚合或子查询的表达式执行聚合函数
我不知道我做错了什么,请帮助。在SQL Server中,您可以这样写:
SELECT productid
FROM soldvia
GROUP BY productid
HAVING SUM(noofitems) = (SELECT TOP (1) SUM(noofitems)
FROM soldvia
GROUP BY productid
ORDER BY SUM(noofitems) DESC
);
不过,更典型的编写查询的方法是使用RANK()
或窗口函数:
SELECT productid
FROM (SELECT productid, SUM(noofitems) as numitems,
RANK() OVER (ORDER BY SUM(noofitems) DESC) as seqnum
FROM soldvia
GROUP BY productid
) t
WHERE seqnum = 1;