2017-01-07 59 views
1

我試圖通過ID分組,然後將它們插入到具有以下查詢另一個表後計算不同的值:INSERT與GROUP BY在VALUE SELECT語句 - ERROR 1111(HY000):無效使用組功能的

INSERT INTO table_aggregate 
    (id_aggregate, aggregate_column) 
(SELECT id_detail, COUNT(DISTINCT(detail_column)) 
    FROM table_detail 
    GROUP BY id_detail) 
ON DUPLICATE KEY UPDATE 
    aggregate_column = COUNT(DISTINCT(detail_column)); 

在運行時出現錯誤:

ERROR 1111 (HY000): Invalid use of group function

如果我運行它工作正常查詢的SELECT語句部分。爲什麼拋出這個錯誤?

+0

你想知道爲什麼它拋出一個錯誤,或者你想建立一個正常運作的查詢?如果是後者,請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple -sql-query – Strawberry

+0

嘗試UPDATE部分中的'VALUES(aggregate_column)'。 –

回答

2

在UPDATE部分中不能使用COUNT。使用VALUES(aggregate_column)來代替:

INSERT INTO table_aggregate 
    (id_aggregate, aggregate_column) 
(SELECT id_detail, COUNT(DISTINCT(detail_column)) 
    FROM table_detail 
    GROUP BY id_detail) 
ON DUPLICATE KEY UPDATE 
    aggregate_column = VALUES(aggregate_column); 

http://rextester.com/KTEDM89215

1

你可以把聚集的子查詢中。然後,你可以參考的計算值在update

INSERT INTO 
    table_aggregate (id_aggregate, aggregate_column) 
    SELECT 
     * 
    FROM 
     (
      SELECT 
       id_detail, 
       COUNT(DISTINCT(detail_column)) AS count 
      FROM 
       table_detail 
      GROUP BY 
       id_detail 
     ) AS aggr 
ON DUPLICATE KEY 
UPDATE 
    aggregate_column = aggr.count 
+0

謝謝,我可以看到這會奏效,但另一個答案更簡潔,因爲不需要創建第二個SELECT語句。 –

相關問題