Skulle något så enkelt som detta fungera?
insert into cities (city, state, size)
select city, state, count(*) as size from listings
group by city, state
group by
bör se till att det inte finns några dubbletter så att det inte finns något behov av on duplicate key
. Sum() + underfrågan du gjorde ser ut som att du bara försökte räkna(*).
Det specifika felet du fick berodde på size=sum(count). I en batchinlaga skulle det korrekta sättet att göra detta vara size=values(size), se dokumenten på values()
.
EDIT:
Om det läggs till ytterligare en post för varje stad så finns det inte ett unikt index på stad och en dubblettnyckel kommer inte att göra någonting ändå.
om du lägger till ett unikt index på (stad, stat) kan du lägga till on duplicate key update size=values(size)
till ovanstående fråga och den kommer att uppdatera varje post på plats.