纪筱白 2022-05-11 13:21 采纳率: 75%
浏览 25
已结题

mysql 查询结果分段整合 有什么更好的方法嘛?

想把时间分成4段,并统计每段时间的总人数,达成以下效果

img


以下是我写的代码,感觉有点乱,有没有什么更好的办法改进一下呀?

WITH t1 AS (
    # 分段整合
    SELECT
        SUM( IF ( log_hour IN ( 0, 1, 2, 3, 4, 5 ), num_user, NULL ) ) AS '0to6',
        SUM( IF ( log_hour IN ( 6, 7, 8, 9, 10, 11 ), num_user, NULL ) ) AS '6to12',
        SUM( IF ( log_hour IN ( 12, 13, 14, 15, 16, 17 ), num_user, NULL ) ) AS '12to18',
        SUM( IF ( log_hour IN ( 18, 19, 20, 21, 22, 23 ), num_user, NULL ) ) AS '18to24' 
    FROM
        ( 
        # 提取hour
        SELECT 
            HOUR ( log_hms ) AS log_hour,
            COUNT( user_id ) AS num_user 
            FROM 
                login_rec 
            GROUP BY 
                log_hour ) a 
    ) 
# 列转行
SELECT
    '0to6' AS period,
    MAX( 0to6 ) AS num 
FROM
    t1 
UNION
SELECT
    '6to12' AS period,
    MAX( 6to12 ) AS num 
FROM
    t1 
UNION
SELECT
    '12to18' AS period,
    MAX( 12to18 ) AS num 
FROM
    t1 
UNION
SELECT
    '18to24' AS period,
    MAX( 18to24 ) AS num 
FROM
    t1;
  • 写回答

3条回答 默认 最新

  • 纪筱白 2022-05-12 11:55
    关注

     找到整洁些的方法啦!n_n

    # 先划分等级,再分组统计
    DROP VIEW IF EXISTS u_1_3;
    CREATE VIEW u_1_3 AS SELECT
    (
    	CASE
    			WHEN login_hour IN ( 0, 1, 2 ) THEN '00:00-03:00' 
    			WHEN login_hour IN ( 3, 4, 5 ) THEN '03:00-06:00' 
    			WHEN login_hour IN ( 6, 7, 8 ) THEN '06:00-09:00' 
    			WHEN login_hour IN ( 9, 10, 11 ) THEN '09:00-12:00' 
    			WHEN login_hour IN ( 12, 13, 14 ) THEN '12:00-15:00' 
    			WHEN login_hour IN ( 15, 16, 17 ) THEN '15:00-18:00' 
    			WHEN login_hour IN ( 18, 19, 20 ) THEN '18:00-21:00' 
    			ELSE '21:00-24:00' 
    	END 
    		) AS t_level,
    		SUM( num_user ) AS num 
    	FROM
    		( SELECT 
    				# 提取hour
    				HOUR ( login_time ) AS login_hour, 
    				COUNT( user_id ) AS num_user 
    			FROM 
    				re_login 
    			GROUP BY 
    				login_hour 
    			ORDER BY 
    				login_hour ) t 
    	GROUP BY
    		t_level;
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 修改了问题 5月11日
  • 创建了问题 5月11日

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大