mysql实现流量的同比环比将子查询做链接实现相应业务

mysql实现流量的同比环比将子查询做链接实现相应业务

同比环比的概念:

在这里插入图片描述

实现的相应代码:
思路,获取今月和上月想要查询的信息做连接查询,把子查询作为连接查询的联表,然后计算出相应的同比环比,注意同比环比的公式对应的条件,同时把数据字段中为空的信息给删掉
CASE WHEN: 类似分支条件
TRUNCATE(IFNULL(SUM(tdf.arrive_flow),0),2): 剔除为空的值,求和条件,以及小数点位数
时间格式正确判断

SELECT
        t.nowMonth time,
        t.siteName,
        t.cityName,
        CASE WHEN t.arriveFlow IS NULL OR t.arriveFlow = 0 THEN 0 ELSE t.arriveFlow END arriveFlow,
        CASE WHEN y.arriveFlow IS NULL OR y.arriveFlow = 0 THEN 0.00 ELSE ROUND((t.arriveFlow-y.arriveFlow) / y.arriveFlow * 100, 2) END ProportionT
        FROM
        (
        SELECT
        DATE_FORMAT(tdf.statistics, '%Y-%m' ) AS nowMonth,
        TRUNCATE(IFNULL(SUM(tdf.arrive_flow),0),2) arriveFlow,
        ts.site_name AS siteName,
        a.full_name AS cityName
        FROM  train_daily_flow tdf
        LEFT JOIN train_site  ts ON ts.uuid=tdf.site_id
        LEFT JOIN sys_area a ON a.area_code = ts.administrative_code
        WHERE
        DATE_FORMAT(tdf.statistics,'%Y-%m') BETWEEN DATE_FORMAT(DATE_SUB(tdf.statistics,INTERVAL DATE_FORMAT(tdf.statistics,'%m')-1 MONTH),'%Y-%m')
        AND #{"日期"}
        AND ts.administrative_code IS NOT NULL
        GROUP BY ts.uuid,DATE_FORMAT(tdf.statistics,"%Y")
        ORDER BY arriveFlow DESC LIMIT 0,5
        ) AS t
        LEFT JOIN
        (
        SELECT
        YEAR(DATE_SUB(tdf.statistics, INTERVAL 1 YEAR))AS lastMonth,
        TRUNCATE(IFNULL(SUM(tdf.arrive_flow),0),2) arriveFlow,
        ts.site_name AS siteName,
        a.full_name AS cityName
        FROM  train_daily_flow tdf
        LEFT JOIN train_site ts ON ts.uuid=tdf.site_id
        LEFT JOIN sys_area a ON a.area_code =ts.administrative_code
        WHERE
        DATE_FORMAT(tdf.statistics,'%Y-%m') BETWEEN DATE_FORMAT(DATE_SUB(tdf.statistics,INTERVAL DATE_FORMAT(tdf.statistics,'%m')-1 MONTH),'%Y-%m')
        AND
        DATE_FORMAT(DATE_SUB(#{"日期"},INTERVAL 1 MONTH),'%Y-%m')
        AND ts.administrative_code IS NOT NULL
        GROUP BY ts.uuid,YEAR(DATE_ADD(tdf.statistics, INTERVAL 1 MONTH))
        ORDER BY arriveFlow DESC LIMIT 0,5
        ) AS y
        ON t.cityName = y.cityName

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值