簡體   English   中英

SQL Server無法對包含聚合或子查詢的表達式執行聚合函數

[英]SQL Server Cannot perform an aggregate function on an expression containing an aggregate or a subquery

我的存儲過程存在問題。

我收到錯誤:

無法對包含聚合或子查詢的表達式執行聚合函數

這是我的存儲過程的一部分,我相信錯誤發生:

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表中最多只有一個匹配項(產品,而不是Table_Products - 當然它是一個表,所以不要把它放在名稱中)。 換句話說,如果product是Products表的PK(或AK),這將起作用。

如果情況並非如此,並且您可能在Products表中有多個匹配項,那么您可以JOIN到在product列上使用DISTINCT的子查詢。

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 

您可以在子查詢中移動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 ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM