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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:07:31