Ville noget så simpelt som dette virke?
insert into cities (city, state, size)
select city, state, count(*) as size from listings
group by city, state
group by
skal sikre, at der ikke er dubletter, så der ikke er behov for on duplicate key
. Den sum() + underforespørgsel, du lavede, ser ud til, at du bare prøvede at lave en optælling(*).
Den specifikke fejl, du fik, var på grund af størrelsen =sum(antal). I en batch-indsættelse ville den korrekte måde at gøre dette på være size=values(size), se dokumenterne på values()
.
EDIT:
Hvis det tilføjer endnu en post for hver by, er der ikke et unikt indeks for by, og en dubletnøgle vil ikke gøre noget alligevel.
hvis du tilføjer et unikt indeks på (by, stat), så kan du tilføje on duplicate key update size=values(size)
til ovenstående forespørgsel, og den vil opdatere hver post på plads.