当前位置:首页 > 数据库 > SQL > 正文内容

SQL数据表处理练习

小道6年前 (2018-08-27)SQL5034

SQL数据表处理练习

有一个 工作表 如下:

image.png

以下输出结果全部依分钟计算。

(一)输出所有数据中通话时间最长的5条记录:

select top 5 * from 工作 order by DATEDIFF(MI,开始时间,结束时间) desc

输出结果:

image.png

(二)输出所有数据中拨打长途号码的总时长:

select SUM(DATEDIFF(mi,开始时间,结束时间)) as 长途电话总时长 from 工作 where 电话 like '0%'

输出结果:

image.png

(三)输出本月通话时长最多的前三位员工工号:

select top 3 工号,SUM(DATEDIFF(mi,开始时间,结束时间)) as 本月通话总时长前三     --输出
from 工作 
where DATEPART(MM,开始时间) = DATEPART(MM,GETDATE())   --判断 获取通话时间和当前时间的月份是否相等
group by 工号    --根据工号分组
order by SUM(DATEDIFF(mi,开始时间,结束时间)) desc   --根据通话时长 降序排列

输出结果:

image.png

(四)输出本月拨打电话次数最多的员工编号:

select top 3 工号,COUNT(*) as 拨打电话次数  --输出
from 工作 --工作表
where DATEDIFF(MM,开始时间,GETDATE()) =0   --判断通话时间和当前时间的月份是否为0,如果为0,则是本月。
group by 工号   --根据 工号 分组
order by COUNT(*) desc   --根据次数降序排列

输出结果:

image.png

(五)输出所有数据的拨号流水,并在最后一行添加总呼时长:

select 工号,电话,DATEDIFF(MI,开始时间,结束时间) as 通话时长 from 工作   -- 先得到所有拨号数据
union all  
select '汇总',
CONVERT(varchar(50),SUM(DATEDIFF(mi,开始时间,结束时间))), -- 输出 长途通话时长。CONVERT 是将 长途通话时长 转变为 varchar 类型。与上面  电话 类型 匹配。
(select SUM(DATEDIFF(mi,开始时间,结束时间)) from 工作 where 电话 not like '0%')  --子查询 输出市内通话时长
from 工作 
where 电话 like '0%'

输出结果:

image.png


另一种写法:

select 工号,电话,DATEDIFF(MI,开始时间,结束时间) as 通话时长 from 工作   -- 先得到所有拨号数据
union all  
select '汇总',
CONVERT(varchar(50),sum((
case
when 电话 like '0%' then DATEDIFF(MI,开始时间,结束时间)
else 0
end
))) as 长途通话总时长,
sum((
case
when 电话 not like '0%' then DATEDIFF(MI,开始时间,结束时间)
else 0
end
))as 市内通话总时长
from 工作

输出结果:

image.png


扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://daobk.com/post/74.html

分享给朋友:

“SQL数据表处理练习” 的相关文章

数据的分组:GROUP BY

数据的分组:GROUP BY

数据的分组:GROUP BYGROUP BY子句必须放在WHERE 语句后面。统计出数据表中大于12岁的人数:select COUNT(*) from Person where Age >12输出结果:统计Person 中各个年龄的人...

SQL语句:输出结果限制

SQL语句:输出结果限制

显示年龄前三的 人物信息:select top 3 * from Person order by Age desc输出结果:获取年龄降序排列中的是第3个~5个的数据。select top 3...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。