我希望存储一个查询结果,该查询返回特定列中所有唯一值的列表,以及它们重复的次数:
SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name;
返回类似于:
的内容COL_NAME
总
它工作得很好,正是我需要的。但是我需要将结果存储到另一个表中(例如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
?
任何帮助非常感谢!! 感谢
答案 0 :(得分:2)
您可以在INSERT语句后立即执行SELECT。只要您选择的内容与您要插入的值匹配(在本例中为name和count)。您可以通过单独运行select语句来测试将插入到countTable中的内容。
INSERT INTO countTable (name, count)
SELECT col_name, COUNT(*) AS 'total'
FROM dataTable
GROUP BY col_name;
答案 1 :(得分:0)
AH!事实证明我在原始查询中非常接近:
INSERT INTO countTable (name, count) SELECT col_name, total FROM
(SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name);
我DID需要在最后添加额外的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;
但是太空人的回答可以证明我不必要地把它包裹起来。