2017-01-07 5 views
1

Я пытаюсь подсчитать различные значения после Группировка по идентификатору затем вставить их в другую таблицу с помощью следующего запроса:ВСТАВИТЬ с 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

Попробуйте 'VALUES (aggregate_column)' в части UPDATE. –

ответ

2

Вы не можете использовать COUNT в части UPDATE. Используйте 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. –

 Смежные вопросы

  • Нет связанных вопросов^_^