1

こんにちは - 私は MySQL 初心者です。さまざまなビジネス リスティングのテーブルがあり、一意の都市名と都市ごとのリスティング数を含む、cities という 2 番目のテーブルを作成しようとしています。次のように、このデータをうまく取得する SELECT ステートメントを実行できます。

SELECT city,state,sum(count)
FROM (
SELECT city,state, 1 AS count FROM listings
) results
GROUP BY city
ORDER BY sum(count) DESC,city;

ただし、テーブルを更新したいのですが、適切なステートメントが機能しないようです。これは私が持っている最新のものですが、現在「グループ機能の無効な使用」エラーが発生しています。

INSERT INTO cities(city,state,size)
SELECT city,state,sum(count)
FROM (
SELECT city,state, 1 AS count FROM listings
) results
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), size=sum(count); 

どんな助けでも大歓迎です!

4

2 に答える 2

3

このような単純なものは機能しますか?

insert into cities (city, state, size)
select city, state, count(*) as size from listings
group by city, state

group byの必要がないように、重複がないことを確認する必要がありon duplicate keyます。あなたがしていた sum() + subquery は、count(*) を実行しようとしていたように見えます。

あなたが得ていた特定のエラーは、size=sum(count) が原因でした。バッチ挿入では、これを行う正しい方法は size=values(size) です。 のドキュメントを参照してくださいvalues()

編集:

各都市に別のエントリを追加している場合、都市には一意のインデックスがなく、重複キーでは何もしません。

(city, state) に一意のインデックスを追加するon duplicate key update size=values(size)と、上記のクエリに追加でき、各レコードが適切に更新されます。

于 2009-11-11T00:39:11.287 に答える
0

これを試してみてください。ただし、あなたに解き放つ前にテストするものがあればいいのにと思います。

insert into cities (city, state, size)
select city, state, count(*) AS size
from listings
group by city, state
于 2009-11-11T00:40:44.850 に答える