我的存储过程存在问题。
我收到错误:
无法对包含的表达式执行聚合函数 聚合或子查询
这是我的存储过程中我认为发生错误的部分:
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
谢谢。
答案 0 :(得分:6)
如果你试图避免相关的子查询,你通常会获得更好的性能:
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表中最多只有一个匹配(产品,而不是Table_Products - 当然它是一个表,所以不要把它放在名称中)。换句话说,如果product是Products表的PK(或AK),这将起作用。
如果情况并非如此,并且您可能在Products
表格中有多个匹配项,那么您可以JOIN
使用DISTINCT
product
上的{{1}} }专栏。
答案 1 :(得分:2)
SELECT
column_1, column_2,
SUM(
CASE
WHEN table_products.product IS NULL THEN 1
ELSE 0
END
) AS Total
FROM my_table
left join table_products on my_table.column_2 = table_products.product
WHERE is_rated = '1'
GROUP BY column_1, column_2
答案 2 :(得分:0)
您可以在子查询中移动SUM()
逻辑:
SELECT t.column_1, t.column_2,
(SELECT COUNT(*)
FROM table_products p
WHERE t.column_2 <> p.product
) as Total
FROM my_table t
WHERE t.is_rated = '1'
GROUP BY t.column_1, t.column_2 ;