sql经典实例_记录02(数值、日期的处理)

本文介绍了SQL中数值处理的方法,包括计算均值、处理null值、求最小值和最大值、求和及排序。同时,详细讲解了日期的处理,如datetime类型、timesmap类型的日期差计算以及如何获取日期的星期。通过示例展示了如何使用avg、coalesce、min、max、sum、over、group by等函数,以及dayname函数的应用。
摘要由CSDN通过智能技术生成

数值的处理

均值

avg函数会忽略null值
例:计算demo表中的age均值。
在这里插入图片描述
avg计算均值之后再经过cast转化为整数,得到18说明avg已经忽略null值。

select cast(avg(age) as DECIMAL(10)) as avgage
from demo

在这里插入图片描述

将null值计算进去

思路:

  • 使用coalesce将null值填充为0,然后使用avg

例:使用coalesce

select cast(avg(COALESCE(age,0)) as DECIMAL(10)) as avgage
from demo;

在这里插入图片描述

最小值、最大值

思路:

  • 使用min、max
  • 使用orderby,再使用limit限制一行数据

例:使用min、max拿出最小最大的age

select min(age),max(age)
from demo;

在这里插入图片描述
例:使用orderby和limit,使用标量子查询合并

select age as minage,(select age as maxge from demo where age is not null order by age desc limit 1) as maxage
from demo
where age is not null
order by age asc
limit 1;

在这里插入图片描述

求和

思路:sum函数
例:将年龄相加再除以总人数算平均值
注意:指定列名得count(age)会忽略null值,count(*)会把null值加进去

select sum(age) as allage,count(age) as agenum,cast(sum(age)/count(age) as DECIMAL(10)) as avgage
from demo

在这里插入图片描述

求和后排序

思路:sum、over、group by一起使用
例:工资求和后按照create_by排序

select sum(salary_money) over(order by salary_money,create_by) as list,create_by
from demo
group by create_by;

在这里插入图片描述

日期的处理

datetime类型

datetime的时间差得到秒数
例:计算跟新时间与创建时间之间的天数

select CONCAT(cast((update_time-create_time)/(60*60*60*24) as DECIMAL(10)),' 天') as cast_day,name
from demo  
where update_time is not null and create_time is not null;

在这里插入图片描述

timesmap类型

时间差获得秒数
例:计算更新时间与创建时间相隔的天数
在这里插入图片描述

select concat(cast((update_time-create_time)/(60*60*60*24) as DECIMAL(10)),' 天') as cast_day,name
from test_timestamp

在这里插入图片描述

计算星期

思考:
方法一:给定年月日的数值,先判断闰年还是平年,得出2月的天数,算出所有的天数对7取余数(较为麻烦)。
方法二:内置函数dayname自动计算。
例:dayname函数获知每一个日期的星期几

select dayname(update_time) as dayname
from test_timestamp;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yma16

感谢支持!共勉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值