SQL 常用的SQL

1.根据时段统计,不同类型,并累加次数

SELECT 
  SUM(CASE click_type WHEN 1 THEN 1 ELSE 0 END) '曝光量',
  SUM(CASE click_type WHEN 2 THEN 1 ELSE 0 END) '点击量',
    SUM(CASE click_type WHEN 3 THEN 1 ELSE 0 END) '转换量',
  DATE_FORMAT(
    `create_time`,
    '%Y-%m-%d %H:00:00'
  )
FROM
  TAdvertising_report  GROUP BY DATE_FORMAT(`create_time`, '%Y-%m-%d %H')

2.根据用户生日日期,分组去重相同用户,并统计用户数

SELECT age_temp  age,COUNT(*) AS total FROM (
SELECT TIMESTAMPDIFF(YEAR, tu.birthday, CURDATE()) ,
CASE
WHEN TIMESTAMPDIFF(YEAR, tu.birthday, CURDATE()) <=25 THEN '25'
WHEN TIMESTAMPDIFF(YEAR, tu.birthday, CURDATE()) BETWEEN 26 AND 35 THEN '26-35' 
WHEN TIMESTAMPDIFF(YEAR, tu.birthday, CURDATE()) BETWEEN 36 AND 45 THEN '36-45' 
WHEN TIMESTAMPDIFF(YEAR, tu.birthday, CURDATE()) >45 THEN '36-45'
WHEN tu.birthday IS NULL THEN '其它' ELSE 0 END AS age_temp
FROM TUser tu INNER JOIN TAdvertising_report tr ON tu.id =tr.user_id GROUP BY tu.id 
)AS USER GROUP BY age_temp;

 

3.不同状态 分组 并 合并 统计

SELECT 
SUM(CASE WHEN state = 4 OR state = 6 THEN 1 ELSE 0 END) toBeSettled,
SUM(CASE state  WHEN 9 THEN 1 ELSE 0 END) settled,
SUM(s.`settlement_cost`) settlementCost,
DATE_FORMAT(wo.`update_time`, '%Y-%m')   FROM work_order wo 
LEFT JOIN `settlement_order_detail` s 
  ON wo.id = s.`order_id` WHERE 1 = 1  GROUP BY DATE_FORMAT(wo.`update_time`, '%Y-%m')
  ORDER BY DATE_FORMAT(wo.`update_time`, '%Y-%m')

4.根据分数统计不同司机,然后根据司机别名排序

SELECT (CASE WHEN score_safe >= 80 AND score_safe <= 100 THEN '優秀駕駛司機'
WHEN score_safe >= 60 AND score_safe <= 79 THEN '良好駕駛司機'
WHEN score_safe >= 40 AND score_safe <= 59 THEN '正常駕駛司機'
ELSE '危險駕駛司機' END) title, COUNT( 1 ) scoreProportion
FROM driving_behavior_score_safe
GROUP BY title 

ORDER BY CASE title WHEN '優秀駕駛司機' THEN 1
WHEN '良好駕駛司機' THEN 2
WHEN '正常駕駛司機' THEN 3
WHEN '危險駕駛司機' THEN 4 END ASC

5.关联子查询

 SELECT wo.id,
        CASE
        WHEN  wo.`state`= 7  THEN  1
        WHEN wo.`state`= 8 THEN 2
        WHEN  wo.`state`= 9 THEN 3
        END AS state,wo.sn 
        FROM `work_order` wo 
        LEFT JOIN   
        ( SELECT sor.*,sod.`order_id` FROM settlement_order_detail sod INNER JOIN settlement_order sor ON sod.settlement_id=sor.id AND sor.state !=4)
        so ON so.order_id=wo.id
       

6.批量查询并批量新增数据

INSERT INTO `alarm_data`(`car_id`,`device_sn`,`plate_number`,`create_time`)
SELECT `car_id`,`device_sn`,`plate_number`,NOW() FROM `adas_data` 

7.字符串拼接,多条数据拼接成一条,会有长度限制

SELECT GROUP_CONCAT(CONCAT("'",`device_sn`,"'")) FROM TDevice

SELECT GROUP_CONCAT("'",`device_sn`,"'") FROM TDevice
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值