El problema es que en las cláusulas clave duplicadas no puede usar ninguna función de agrupación (como COUNT
. Sin embargo, hay una manera fácil de evitar este problema. Simplemente asigna el resultado del COUNT(crime_id)
llamar a una variable, que puede utilizar en las cláusulas clave duplicadas. Su declaración de inserción se vería así:
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;
Creé un SQL Fiddle que muestra cómo funciona:SQL-Fiddle
También podría usar UPDATE crimecount = VALUES(crimecount)
y sin variables:
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 SQL-Fiddle-2