1

我正在寻找存储查询的结果,该查询返回特定列中所有唯一值的列表,以及它们重复的次数:

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

这会返回类似:

col_name

  • 记录A
  • 记录B
  • 记录C
  • 记录D
  • 记录E...

全部的

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

它工作得很好,正是我需要的。但是我需要将结果存储到另一个表中(例如countTable),所以我不必每次都进行查询,可以索引它......等等。

假设countTable与此处的结果具有完全相同的结构。两列:name并且count与原始结果的类型相同。

这可能会引起一些笑声,但目前我觉得这很接近:

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 回答