1

特定の列のすべての一意の値のリストを返すクエリの結果と、それらが繰り返される回数を保存しようとしています。

SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name;

これは次のようなものを返します。

col_name

  • レコードA
  • レコードB
  • レコードC
  • レコードD
  • 記録する...

合計

  • 39
  • 91817
  • 982027
  • 211872
  • 256...

それはうまく機能しており、まさに私が必要としているものです。しかし、結果を別のテーブル (例: ) に保存する必要があるcountTableため、毎回クエリを実行する必要がなく、インデックスを作成できます...など。

countTableここでの結果とまったく同じ構造を持つとしましょう。2 つの列:namecount元の結果と同じ型です。

これはおそらくいくつかの笑いを引き起こすでしょうが、現在、これは近いと感じています:

INSERT INTO countTable (name, count) SELECT col_name, total FROM 
(SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name);

しかし、私はエラーが発生します:ERROR 1248 (42000): Every derived table must have its own alias

このクエリを正しくラップする方法がわかりません。または、別のクエリをASどこかで使用する必要があるかどうかもわかりません。

どんな助けでも大歓迎です!! ありがとう

4

2 に答える 2

2

INSERT ステートメントの直後に SELECT を実行できます。選択したものが挿入したい値 (この場合は名前と数) と一致する限り。selectステートメントを単独で実行するだけで、countTableに何が挿入されるかをテストできます。

INSERT INTO countTable (name, count)
SELECT col_name, COUNT(*) AS 'total' 
FROM dataTable 
GROUP BY col_name;
于 2013-07-26T13:58:03.887 に答える
0

ああ!元のクエリに非常に近いことがわかりました。

INSERT INTO countTable (name, count) SELECT col_name, total FROM 
(SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name);

最後にエクストラを追加する必要がありましたAS。すべての派生テーブルには、実際に独自のエイリアスが必要です:)

INSERT INTO countTable (name, count) SELECT col_name, total FROM 
(SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name) AS count;

しかし、宇宙飛行士の答えで証明されているように、私はそれを不必要に包んでいるようです.

于 2013-07-26T14:05:48.303 に答える