插件窝 干货文章 如何将三个查询语句合并为一个,以统计不同版本下特定时间创建的记录数?

如何将三个查询语句合并为一个,以统计不同版本下特定时间创建的记录数?

version 2023 查询 COUNT 1032    来源:    2025-04-01

合并三个查询语句的解决方案

要将三个查询语句合并为一个,以统计不同版本下特定时间创建的记录数,可以使用SQL的CASE WHEN语句或条件聚合函数。

原始查询分析

假设原始有三个类似这样的查询:

-- 查询1: 统计版本1的记录数
SELECT COUNT(*) FROM table_name 
WHERE version = '1.0' AND create_time BETWEEN '2023-01-01' AND '2023-01-31';

-- 查询2: 统计版本2的记录数
SELECT COUNT(*) FROM table_name 
WHERE version = '2.0' AND create_time BETWEEN '2023-01-01' AND '2023-01-31';

-- 查询3: 统计版本3的记录数
SELECT COUNT(*) FROM table_name 
WHERE version = '3.0' AND create_time BETWEEN '2023-01-01' AND '2023-01-31';

合并后的查询方案

方案1: 使用条件聚合

SELECT 
    SUM(CASE WHEN version = '1.0' THEN 1 ELSE 0 END) AS version_1_count,
    SUM(CASE WHEN version = '2.0' THEN 1 ELSE 0 END) AS version_2_count,
    SUM(CASE WHEN version = '3.0' THEN 1 ELSE 0 END) AS version_3_count
FROM table_name
WHERE create_time BETWEEN '2023-01-01' AND '2023-01-31';

方案2: 使用GROUP BY

SELECT 
    version,
    COUNT(*) AS record_count
FROM table_name
WHERE create_time BETWEEN '2023-01-01' AND '2023-01-31'
    AND version IN ('1.0', '2.0', '3.0')
GROUP BY version;

方案3: 使用PIVOT (如果数据库支持)

SELECT *
FROM (
    SELECT version FROM table_name
    WHERE create_time BETWEEN '2023-01-01' AND '2023-01-31'
) AS SourceTable
PIVOT (
    COUNT(version)
    FOR version IN ([1.0], [2.0], [3.0])
) AS PivotTable;

推荐方案

方案1(条件聚合)是最通用的解决方案,适用于大多数数据库系统,并且结果以列的形式展示,便于阅读和后续处理。

注意事项

  1. 确保时间范围的格式与数据库中存储的格式一致
  2. 如果版本号可能为NULL,需要额外处理
  3. 对于大型表,确保create_time和version字段有适当的索引以提高查询性能

您可以根据实际使用的数据库系统和具体需求选择最适合的方案。