MySQL中如何基于两个COUNT统计结果计算变化率?——房地产季度销量统计场景
嘿,我来帮你搞定这个销量变化率的计算问题!其实你只需要把两个统计结果整合到一个查询里,就能直接套用公式得到结果啦,这里给你几种实用的写法:
方法1:子查询拼接计算
把你已经写好的两个统计查询作为子查询,让它们的结果在主查询里参与运算,代码非常直观:
SELECT ((T2 - T1) / T1) * 100 AS QoQ_GrowthRate -- QoQ代表季度环比变化率 FROM (SELECT count(*) AS T1 FROM mutation WHERE DateMutation BETWEEN '2020-01-01' AND '2020-03-31') AS Q1_Data, (SELECT count(*) AS T2 FROM mutation WHERE DateMutation BETWEEN '2020-04-01' AND '2020-06-30') AS Q2_Data;
这个写法就是把两个季度的统计结果当成临时表,直接代入你需要的公式计算即可。
方法2:条件聚合(更高效)
如果你的数据表数据量较大,推荐用这种方法——只需要扫描一次表就能统计两个季度的销量,性能会更好:
SELECT ((Q2_Count - Q1_Count) / Q1_Count) * 100 AS QoQ_GrowthRate FROM ( SELECT -- 统计2020年第一季度销量 COUNT(CASE WHEN DateMutation BETWEEN '2020-01-01' AND '2020-03-31' THEN 1 END) AS Q1_Count, -- 统计2020年第二季度销量 COUNT(CASE WHEN DateMutation BETWEEN '2020-04-01' AND '2020-06-30' THEN 1 END) AS Q2_Count FROM mutation ) AS Quarterly_Sales;
重要提示:避免除以0的错误
如果2020年第一季度没有任何销量(也就是T1=0),直接套用公式会触发数据库报错。你可以加个判断逻辑处理这种边界情况,比如返回NULL或者自定义提示:
SELECT CASE WHEN Q1_Count = 0 THEN NULL -- 也可以改成'无第一季度数据'这类提示,根据需求调整 ELSE ((Q2_Count - Q1_Count) / Q1_Count) * 100 END AS QoQ_GrowthRate FROM ( SELECT COUNT(CASE WHEN DateMutation BETWEEN '2020-01-01' AND '2020-03-31' THEN 1 END) AS Q1_Count, COUNT(CASE WHEN DateMutation BETWEEN '2020-04-01' AND '2020-06-30' THEN 1 END) AS Q2_Count FROM mutation ) AS Quarterly_Sales;
内容的提问来源于stack exchange,提问作者casper
相关产品推荐
相关产品推荐

