使用COUNT和GROUP BY时无法跨表选择列的问题求助
问题解决:SQL Server GROUP BY 报错处理
报错原因
你遇到的错误是因为SQL Server的GROUP BY规则要求:SELECT列表中的非聚合列必须要么包含在GROUP BY子句里,要么能被GROUP BY的列唯一确定。你的查询里选了Product.product_name,但没把它加入GROUP BY,数据库无法确认同一个product_id对应的product_name是唯一的,所以抛出错误。
解决方案1:将product_name加入GROUP BY
这是通用的合规写法,把SELECT里的非聚合列都放进GROUP BY:
SELECT Product.product_name, IT_Order.product_id, COUNT(IT_Order.it_order_id) AS Product_volume FROM IT_Order JOIN Product ON IT_Order.product_id = Product.product_id GROUP BY IT_Order.product_id, Product.product_name;
注:这里把旧的逗号连接表方式改成了标准的JOIN语法,可读性和规范性更好。
解决方案2:用聚合函数包裹product_name
如果product_id是Product表的主键(或者product_id能唯一对应一个product_name,这是常见的表设计),可以用MAX()或MIN()这类聚合函数包裹product_name——因为同一个product_id对应的product_name肯定相同,聚合后结果不会改变:
SELECT MAX(Product.product_name) AS product_name, IT_Order.product_id, COUNT(IT_Order.it_order_id) AS Product_volume FROM IT_Order JOIN Product ON IT_Order.product_id = Product.product_id GROUP BY IT_Order.product_id;
内容的提问来源于stack exchange,提问作者Hugo Yu
相关产品推荐
相关产品推荐

