MYSQL各种统计语句小总结

1.SQL查询今天、昨天、n天内、第n天的数据, 本周,本月,上一个月的数据:
https://www.cnblogs.com/hyhyhy/articles/9518063.html
2.SQL 标量函数-----日期函数 day() 、month()、year():
https://www.cnblogs.com/accumulater/p/7218531.html
3.Mysql—— 内连接、左连接、右连接以及全连接查询
https://blog.csdn.net/zjt980452483/article/details/82945663

datesub–进行运算时,时分秒也会参与运算

 select DATE_FORMAT((DATE_SUB(NOW(),INTERVAL 5 MONTH)),'%Y-%m-01 00:00:00' ) from dual

可以用这种方法,实现从1号开始统计,而不是距离当前5个月。

DATEDIFF() 函数返回两个日期之间的时间,实践发现,时分秒不参与运算
计算天数:

DATEDIFF(tft.create_time,NOW())<=0 AND DATEDIFF(tft.create_time,NOW())>-2

计算月数:

tft.create_time BETWEEN DATE_FORMAT((DATE_SUB(NOW(),INTERVAL 1 MONTH)),'%Y-%m-01 00:00:00')and NOW()

4.一条sql语句返回多个count值
https://bbs.csdn.net/topics/390409845
https://blog.csdn.net/weixin_44253425/article/details/88837966

第一种:亲测可以
select date(create_time) as dateTime,count(IF(status!=2,true,null)) as count1,count(IF(status=2,true,null)) as count2
from sur_answer where survey_id = 526  group by date(create_time) order by create_time 
第二种:这种还没实际操作
select  count(case when type='01' then 1 else null end) aCount,
        count(case when type='02' then 1 else null end) bCount from tblA

5.统计百分比:

----SELECT CONCAT(ROUND(20/500*100,2),'%');
---SELECT CONCAT(TRUNCATE(2*100,2),'%') 
CONCAT(ROUND(COUNT(*)/7816*100,2),'%') as cc--亲测有效

6.语句里面使用case语句根据判断实现多个返回结果值
https://www.cnblogs.com/HDK2016/p/8134802.html
最后一章小节:

七、小结

   select 与 case结合使用最大的好处有两点,一是在显示查询结果时可以灵活的组织格式,二是有效避免了多次对同一个表或几个表的访问。

 

下面举个简单的例子来说明。例如表 students(id, name ,birthday, sex, grade),要求按每个年级统计男生和女生的数量各是多少,统计结果的表头为,年级,男生数量,女生数量。如果不用select case when,为了将男女数量并列显示,统计起来非常麻烦,先确定年级信息,再根据年级取男生数和女生数,而且很容易出错。

用select case when写法如下:
SELECT grade, COUNT (CASE WHEN sex = 1 THEN 1     
                            ELSE NULL
                        END) 男生数,
               COUNT (CASE WHEN sex = 2 THEN 1
                            ELSE NULL
                       END) 女生数
FROM students

GROUP BY grade;

亲自实践结果代码:

select CREATE_DATE as 时间,tfc.code_value_name as 业务类型,
CASE
WHEN tfc.code_value_id ='1001' then CONCAT(ROUND(cc/100*100,2),'%')
WHEN tfc.code_value_id ='1002' then CONCAT(ROUND(cc/100*100,2),'%')
WHEN tfc.code_value_id ='1003' then CONCAT(ROUND(cc/100*100,2),'%')
ELSE NULL
END  百分比
  from XXXX

显示结果:
在这里插入图片描述
另外一种是:这个不如上面统计的格式好

select CREATE_DATE as 时间,tfc.code_value_name as 业务类型,
(case  when tfc.code_value_id ='1001' then CONCAT(ROUND(cc/100*100,2),'%')ELSE NULL END) AS 宽带百分比,
(case  when tfc.code_value_id ='1002' then CONCAT(ROUND(cc/100*100,2),'%')ELSE NULL END) AS 融合百分比,
(case  when tfc.code_value_id ='1003' then CONCAT(ROUND(cc/100*100,2),'%')ELSE NULL END) AS 移网百分比
  from  XXX
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值