我的存储过程有问题。
我收到错误消息:
无法对包含聚合或子查询的表达式执行聚合功能
这是我认为发生错误的存储过程的一部分:
SELECT column_1, column_2, SUM(CASE WHEN column_2 NOT IN (SELECT product FROM table_products) THEN 1 ELSE 0 END) AS Total FROM my_table WHERE is_rated = '1' GROUP BY column_1, column_2
谢谢你。
如果您无论如何都要避免相关的子查询,通常可以得到更好的性能:
SELECT MT.column_1, MT.column_2, SUM(CASE WHEN P.product IS NULL THEN 1 ELSE 0 END) AS total FROM My_Table MT LEFT OUTER JOIN Products P ON P.product = MT.column_2 WHERE MT.is_rated = '1' GROUP BY MT.column_1, MT.column_2
假设在Products表中最多只能有一个匹配项(Products,而不是Table_Products- 当然是一个表,因此不要在名称中加上该匹配项)。换句话说,如果product是Products表的PK(或AK),则此方法将起作用。
如果不是这种情况,并且Products表中可能有多个匹配项,则可以JOIN转到DISTINCT在该product列上使用的子查询。
Products
JOIN
DISTINCT
product