日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

6.SQL练习笔记

發布時間:2025/3/20 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 6.SQL练习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

例題1:

表名TableScore
ID?Date?Name?Score
1?2008-8-8 ?拜仁?勝?????
2?2008-8-9 ?奇才?勝?????
3?2008-8-9 ?湖人?勝?????
4?2008-8-10 ?拜仁?負?????
5?2008-8-8 ?拜仁?負?????
6?2008-8-12 ?奇才?負??
要求輸出下面格式:
Name?勝?負
拜仁?1?2
湖人?1?0
奇才?2?0??

本人自己的解法:
select distinct Name,
(case Name
when N'拜仁' then (select count(*) from TableScore where Score='勝' and Name='拜仁')
when N'湖人' then (select count(*) from TableScore where Score='勝' and Name='湖人')
when N'奇才' then (select count(*) from TableScore where Score='勝' and Name='奇才')
end
) as 勝,
(case Name
when N'拜仁' then (select count(*) from TableScore where Score='負' and Name='拜仁')
when N'湖人' then (select count(*) from TableScore where Score='負' and Name='湖人')
when N'奇才' then (select count(*) from TableScore where Score='負' and Name='奇才')
end
) as 負
from TableScore

楊老師的解法:
select Name,
sum(
case Score
when N'勝' then 1
else 0
end
)as 勝,
sum(
case Score
when N'負' then 1
else 0
end
)as 負
from TableScore
group by Name

例題2:
創建一張表,記錄電話呼叫員的工作流水,記錄呼叫員編號,對方號碼,通話開始時間,通話結束時間

。建表,查數據最好都自己寫SQL語句。
要求:
(1)輸出所有數據中通話時間最長的5條記錄;
(2)輸出所有數據中撥打長途號碼(對方號碼以0開頭)的總時長;
(3)輸出本月通話時間最多的前三個呼叫員的編號;
(4)輸出本月撥打電話次數最多的三個呼叫員編號;
(5)輸出所有數據的撥號流水,并且在最后一行添加總呼叫次數
輸出的撥號流水包括呼叫員編號,對方號碼,通話時長。匯總包括市內號碼總時長,長途號碼總時長。

--創建數據表:
use Test
create table TableHuJiao
(
Id int not null identity(1,1) primary key,
UserId nvarchar(50) not null,
PhoneNumber nvarchar(12) not null,
StartTime datetime not null,
EndTime datetime not null
)
--添加數據:
use Test
insert into TableHuJiao values('2','15226018422','2009-01-01 12:32:12','2009-01-01 12:52:12')
insert into TableHuJiao values('3','015226018432','2010-5-2 10:32:12','2010-5-2 12:52:12')
insert into TableHuJiao values('4','015226018442','2010-5-01 12:32:12','2010-5-01 12:42:12')
insert into TableHuJiao values('5','15226018452','2010-6-2 12:32:12','2010-6-2 13:52:12')
insert into TableHuJiao values('6','15226018462','2011-01-1 12:32:12','2011-01-1 12:33:12')
insert into TableHuJiao values('7','15226018472','2011-2-2 12:32:12','2011-2-2 15:00:12')
insert into TableHuJiao values('8','15226018482','2011-3-4 12:32:12','2011-3-4 12:44:12')
insert into TableHuJiao values('9','015226018422','2011-4-3 12:32:12','2011-4-3 12:54:12')
insert into TableHuJiao values('1','15226018422','2011-5-5 12:32:12','2011-5-5 12:45:12')
insert into TableHuJiao values('3','015226018492','2011-6-7 12:32:12','2011-6-7 12:37:12')
insert into TableHuJiao values('2','15226018412','2011-7-6 12:32:12','2011-7-6 12:39:12')
insert into TableHuJiao values('1','15226018422','2011-8-9 12:32:12','2011-8-9 12:40:12')
insert into TableHuJiao values('5','15226018422','2011-9-8 12:32:12','2011-9-8 12:41:12')
insert into TableHuJiao values('11','015226018452','2011-10-21 12:32:12','2011-10-21 12:43:12')
insert into TableHuJiao values('4','15226018462','2011-11-12 12:32:12','2011-11-12 12:55:12')
insert into TableHuJiao values('5','15226018422','2011-11-5 12:32:12','2011-11-5 17:41:12')
insert into TableHuJiao values('11','015226018452','2011-11-6 12:32:12','2011-11-6 14:43:12')
insert into TableHuJiao values('4','15226018462','2011-11-12 12:32:12','2011-11-12 15:55:12')
insert into TableHuJiao values('11','015226018452','2011-11-6 12:32:12','2011-11-6 14:43:12')
insert into TableHuJiao values('4','15226018462','2011-11-12 12:32:12','2011-11-12 15:55:12')

--1)輸出所有數據中通話時間最長的5條記錄;
--我的解法:
use Test
select top 5 * from
(
select UserId as 呼叫員編號, PhoneNumber as 對方號碼,
datediff(second,StartTime,EndTime) as 通話時長
from TableHuJiao
)tr
order by 通話時長 desc
--老師的解法:
select top 5 * from TableHuJiao
order by datediff(second,StartTime,EndTime) desc

--2)輸出所有數據中撥打長途號碼(對方號碼以0開頭)的總時長;
--我的解法:
select UserId as 呼叫員編號,PhoneNumber as 對方號碼,
datediff(second,StartTime,EndTime) as 通話時長
from TableHuJiao
where PhoneNumber like '0%'
order by 通話時長 desc
--老師的解法:
select sum(datediff(second,StartTime,EndTime)) from TableHuJiao
where PhoneNumber like '0%'

--3)輸出本月通話時間最多的前三個呼叫員的編號;

--老師的解法:
select top 3 UserId from TableHuJiao
where datediff(month,StartTime,getdate())=0
group by UserId
order by sum(datediff(second,StartTime,EndTime)) desc

--4)輸出本月撥打電話次數最多的三個呼叫員編號;
--我的解法:
select top 3 * from
(
select distinct UserId as 呼叫員編號, count(UserId) as 呼叫次數 from TableHuJiao
where Datediff(month,StartTime,getdate())=0
group by UserId
)tr
order by 呼叫次數 desc
--老師的解法:
select UserId,count(*) from TableHuJiao
where Datediff(month,StartTime,getdate())=0
group by UserId
order by count(*) desc

--5)輸出所有數據的撥號流水,并且在最后一行添加總呼叫次數
--輸出的撥號流水包括呼叫員編號,對方號碼,通話時長。匯總包括市內號碼
--總時長,長途號碼總時

長。

--老師的解法:
select UserId as 呼叫員編號,PhoneNumber as 對方號碼,
datediff(second,StartTime,EndTime) as 通話時長
from TableHuJiao

union allselect '匯總',convert(nvarchar(12),

sum
(

(case

when PhoneNumber not like '0%' then datediff(second,StartTime,EndTime)else 0

end)
))as 市內通話,sum
(

(case

when PhoneNumber like '0%' then datediff(second,StartTime,EndTime)

else 0

end)) as 長途通話

from TableHuJiao

轉載于:https://www.cnblogs.com/xu-qian-gang/archive/2011/11/30/2268976.html

總結

以上是生活随笔為你收集整理的6.SQL练习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。