Qualcosa di così semplice funzionerebbe?
insert into cities (city, state, size)
select city, state, count(*) as size from listings
group by city, state
group by
dovrebbe assicurarsi che non ci siano duplicati in modo che non sia necessario on duplicate key
. L'operazione sum() + subquery che stavi facendo sembra che stavi solo cercando di fare un conteggio(*).
L'errore specifico che stavi ricevendo era dovuto a size=sum(count). In un inserimento batch il modo corretto per farlo sarebbe size=values(size), vedere i documenti su values()
.
MODIFICA:
Se sta aggiungendo un'altra voce per ogni città, allora non c'è un indice univoco sulla città e sulla chiave duplicata non farà nulla comunque.
se aggiungi un indice univoco su (città, stato), puoi aggiungere on duplicate key update size=values(size)
alla query di cui sopra e aggiornerà ogni record esistente.