You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个MySQL查询以统计指定季度的总里程?

合并时段里程统计的正确SQL写法

数据库表结构

jurisdictiontotal_milesquarteryear
AL30032022
AL50032022
AL20042022
AL10012023
AL5022023

原独立查询(可正确统计分段里程)

SELECT sum(total_miles) FROM db_table WHERE quarter >= 3 AND year = '2022' AND jurisdiction = 'AL';
SELECT sum(total_miles) FROM db_table WHERE quarter <= 2 AND year = '2023' AND jurisdiction = 'AL';

错误查询的问题

你之前的合并查询用AND连接两个时段条件:

SELECT sum(total_miles) FROM db_table WHERE (quarter >= 3 AND year = '2022') AND (quarter <= 2 AND year = '2023') AND jurisdiction = 'AL'

这会要求一条数据同时满足2022年Q3/Q4和2023年Q1/Q2,显然不存在这样的数据,因此sum(total_miles)返回NULL。

正确的合并查询写法

方法1:用OR连接两个时段条件组

将两个时段的判断用OR分隔,同时保留jurisdiction = 'AL'的全局过滤:

SELECT sum(total_miles) FROM db_table 
WHERE jurisdiction = 'AL'
AND (
    (year = '2022' AND quarter >= 3) 
    OR 
    (year = '2023' AND quarter <= 2)
);

方法2:用日期范围简化条件(更简洁)

把季度转换为逻辑日期范围,合并后目标时段是2022年7月1日至2023年6月30日,可通过日期函数实现(不同数据库语法略有差异):

-- MySQL示例
SELECT sum(total_miles) FROM db_table 
WHERE jurisdiction = 'AL'
AND STR_TO_DATE(CONCAT(year, '-', (quarter*3-2), '-01'), '%Y-%m-%d') BETWEEN '2022-07-01' AND '2023-06-30';

方法3:分别统计再求和(保留分段结果)

如果需要同时查看分段统计值和总里程,可通过UNION ALL合并后再求和:

SELECT sum(sub.total) AS total_miles
FROM (
    SELECT sum(total_miles) AS total FROM db_table WHERE quarter >=3 AND year='2022' AND jurisdiction='AL'
    UNION ALL
    SELECT sum(total_miles) AS total FROM db_table WHERE quarter <=2 AND year='2023' AND jurisdiction='AL'
) AS sub;

内容的提问来源于stack exchange,提问作者I_hate_arrays42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:17:40