O problema é que nas cláusulas de chave duplicada você não pode usar nenhuma função de agrupamento (como
COUNT
. No entanto, existe uma maneira fácil de contornar esse problema. Você acabou de atribuir o resultado do COUNT(crime_id)
chamar para uma variável, que você pode use nas cláusulas de chave duplicada. Sua instrução de inserção ficaria assim:INSERT INTO `simple_crimecount` (`date` , `city` , `crimecount`)(
SELECT
`date`,
`city`,
@determined_crimecount := count(`crime_id`) AS `determined_crimecount`
FROM `big_log_of_crimes`
GROUP BY `date`, `city`
) ON DUPLICATE KEY UPDATE `crimecount` = @determined_crimecount;
Eu criei um SQL Fiddle que mostra como ele funciona:SQL-Fiddle
Você também pode usar
UPDATE crimecount = VALUES(crimecount)
e sem variáveis:INSERT INTO `simple_crimecount` (`date` , `city` , `crimecount`)(
SELECT
`date`,
`city`,
count(`crime_id`) AS `determined_crimecount`
FROM `big_log_of_crimes`
GROUP BY `date`, `city`
) ON DUPLICATE KEY UPDATE `crimecount` = VALUES(crimecount);
Consulte o SQL-Fiddle-2