sql语句根据一个表字段的不同类型分别操作并同时显示在一条语句中

今天遇到一种sql语句的情况,如下图,我的需求是根据gate_type(大门类型:出口和入口,分别去统计各个时间段的人数和),如果是分开去统计的只要根据group by就行,但是我需要他们显示成一条数据,在这里插入图片描述在这里插入图片描述
结果解决:
用交叉查询:case函数 语法:case when 条件 then XXX else null end
其中null可以换成0或者是其他你想默认的数据,意思就是XXX如果没查到就给定一个数

SELECT ground_name ,
SUM(CASE WHEN a.gate_type='入口' THEN (before_09+time_09_10+time_10_11+time_11_12+time_12_13+time_13_14+time_14_15+time_15_16+time_16_17+time_17_18+time_18_19+time_19_20+time_20_21+after_21) ELSE NULL END) AS "入口总人数",
SUM(CASE WHEN a.gate_type='出口' THEN (before_09+time_09_10+time_10_11+time_11_12+time_12_13+time_13_14+time_14_15+time_15_16+time_16_17+time_17_18+time_18_19+time_19_20+time_20_21+after_21) ELSE NULL END) AS "出口总人数" 
FROM dwd_tour_ticket_stat_flow_d  AS a 
WHERE date_time='20190802' 
GROUP BY ground_name;


在这里插入图片描述

参考其他的文章:https://blog.csdn.net/xingxing1839381/article/details/85328444

另外一种sql:
MySQL一个字段中逗号隔开的拆成多行
在这里插入图片描述
需要拆成
在这里插入图片描述
具体的sql: test_001是表名 typeid2是需要拆分的字段名,下面的sql最多支持拆成7个 需要增加数量 UNION ALL SELECT 7 以此类推

SELECT
  id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(typeid2, ',', numbers.n), ',', -1) AS typeid
FROM
  test_001 
JOIN
  (SELECT 1 n UNION ALL 
  SELECT 2 UNION ALL 
  SELECT 3 UNION ALL 
  SELECT 4 UNION ALL 
  SELECT 5 UNION ALL 
  SELECT 6 UNION ALL 
  SELECT 7) numbers
ON
  CHAR_LENGTH(typeid2)
  -CHAR_LENGTH(REPLACE(typeid2, ',', ''))>=numbers.n-1
ORDER BY id,typeid
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值