如何将嵌套SELECT查询结果创建为SQL中的新表?
解决方案
1. 完成统计查询(得到单行多列的统计结果)
你当前的思路是可行的——用标量子查询作为SELECT的列,每个子查询返回单个统计值,最终会生成一行包含所有统计字段的结果。只需按相同格式继续添加其他表的统计项即可:
SELECT (SELECT COUNT(DISTINCT u.id) FROM Users u) AS totalUsers, (SELECT COUNT(DISTINCT c.id) FROM Categories c) AS totalCategories, (SELECT COUNT(DISTINCT o.id) FROM Orders o) AS totalOrders, -- 示例:新增订单表统计 (SELECT COUNT(DISTINCT p.id) FROM Products p) AS totalProducts -- 示例:新增产品表统计
执行后会直接返回你想要的结果格式:
totalUsers totalCategories totalOrders totalProducts 60 10 200 150
2. 将统计结果创建为新表
如果需要把统计结果持久化到新表中,不同SQL方言的实现略有差异,以下是通用方案:
方式一:一键创建表并插入数据(推荐)
使用CREATE TABLE ... AS SELECT语法,一步完成表结构创建和数据插入:
CREATE TABLE TableStatistics AS SELECT (SELECT COUNT(DISTINCT u.id) FROM Users u) AS totalUsers, (SELECT COUNT(DISTINCT c.id) FROM Categories c) AS totalCategories, (SELECT COUNT(DISTINCT o.id) FROM Orders o) AS totalOrders
方式二:先定义表结构,再插入数据
如果需要自定义字段数据类型(比如指定INT而非默认的BIGINT),可以拆分步骤:
-- 1. 创建空表 CREATE TABLE TableStatistics ( totalUsers INT, totalCategories INT, totalOrders INT ); -- 2. 插入统计结果 INSERT INTO TableStatistics SELECT (SELECT COUNT(DISTINCT u.id) FROM Users u), (SELECT COUNT(DISTINCT c.id) FROM Categories c), (SELECT COUNT(DISTINCT o.id) FROM Orders o);
补充说明
- 如果表的
id是主键(本身唯一),可以去掉DISTINCT,提升查询效率:COUNT(u.id) - SQL Server 不支持
CREATE TABLE ... AS SELECT,需改用SELECT ... INTO语法:
SELECT (SELECT COUNT(DISTINCT u.id) FROM Users u) AS totalUsers, (SELECT COUNT(DISTINCT c.id) FROM Categories c) AS totalCategories INTO TableStatistics;
内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu
相关产品推荐
相关产品推荐

