6.SQL练习笔记
例題1:
表名TableScore
ID?Date?Name?Score
1?2008-8-8 ?拜仁?勝?????
2?2008-8-9 ?奇才?勝?????
3?2008-8-9 ?湖人?勝?????
4?2008-8-10 ?拜仁?負(fù)?????
5?2008-8-8 ?拜仁?負(fù)?????
6?2008-8-12 ?奇才?負(fù)??
要求輸出下面格式:
Name?勝?負(fù)
拜仁?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='負(fù)' and Name='拜仁')
when N'湖人' then (select count(*) from TableScore where Score='負(fù)' and Name='湖人')
when N'奇才' then (select count(*) from TableScore where Score='負(fù)' and Name='奇才')
end
) as 負(fù)
from TableScore
楊老師的解法:
select Name,
sum(
case Score
when N'勝' then 1
else 0
end
)as 勝,
sum(
case Score
when N'負(fù)' then 1
else 0
end
)as 負(fù)
from TableScore
group by Name
例題2:
創(chuàng)建一張表,記錄電話呼叫員的工作流水,記錄呼叫員編號(hào),對(duì)方號(hào)碼,通話開始時(shí)間,通話結(jié)束時(shí)間
。建表,查數(shù)據(jù)最好都自己寫SQL語句。
要求:
(1)輸出所有數(shù)據(jù)中通話時(shí)間最長的5條記錄;
(2)輸出所有數(shù)據(jù)中撥打長途號(hào)碼(對(duì)方號(hào)碼以0開頭)的總時(shí)長;
(3)輸出本月通話時(shí)間最多的前三個(gè)呼叫員的編號(hào);
(4)輸出本月?lián)艽螂娫挻螖?shù)最多的三個(gè)呼叫員編號(hào);
(5)輸出所有數(shù)據(jù)的撥號(hào)流水,并且在最后一行添加總呼叫次數(shù)
輸出的撥號(hào)流水包括呼叫員編號(hào),對(duì)方號(hào)碼,通話時(shí)長。匯總包括市內(nèi)號(hào)碼總時(shí)長,長途號(hào)碼總時(shí)長。
--創(chuàng)建數(shù)據(jù)表:
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
)
--添加數(shù)據(jù):
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)輸出所有數(shù)據(jù)中通話時(shí)間最長的5條記錄;
--我的解法:
use Test
select top 5 * from
(
select UserId as 呼叫員編號(hào), PhoneNumber as 對(duì)方號(hào)碼,
datediff(second,StartTime,EndTime) as 通話時(shí)長
from TableHuJiao
)tr
order by 通話時(shí)長 desc
--老師的解法:
select top 5 * from TableHuJiao
order by datediff(second,StartTime,EndTime) desc
--2)輸出所有數(shù)據(jù)中撥打長途號(hào)碼(對(duì)方號(hào)碼以0開頭)的總時(shí)長;
--我的解法:
select UserId as 呼叫員編號(hào),PhoneNumber as 對(duì)方號(hào)碼,
datediff(second,StartTime,EndTime) as 通話時(shí)長
from TableHuJiao
where PhoneNumber like '0%'
order by 通話時(shí)長 desc
--老師的解法:
select sum(datediff(second,StartTime,EndTime)) from TableHuJiao
where PhoneNumber like '0%'
--3)輸出本月通話時(shí)間最多的前三個(gè)呼叫員的編號(hào);
--老師的解法:
select top 3 UserId from TableHuJiao
where datediff(month,StartTime,getdate())=0
group by UserId
order by sum(datediff(second,StartTime,EndTime)) desc
--4)輸出本月?lián)艽螂娫挻螖?shù)最多的三個(gè)呼叫員編號(hào);
--我的解法:
select top 3 * from
(
select distinct UserId as 呼叫員編號(hào), count(UserId) as 呼叫次數(shù) from TableHuJiao
where Datediff(month,StartTime,getdate())=0
group by UserId
)tr
order by 呼叫次數(shù) desc
--老師的解法:
select UserId,count(*) from TableHuJiao
where Datediff(month,StartTime,getdate())=0
group by UserId
order by count(*) desc
--5)輸出所有數(shù)據(jù)的撥號(hào)流水,并且在最后一行添加總呼叫次數(shù)
--輸出的撥號(hào)流水包括呼叫員編號(hào),對(duì)方號(hào)碼,通話時(shí)長。匯總包括市內(nèi)號(hào)碼
--總時(shí)長,長途號(hào)碼總時(shí)
長。
--老師的解法:
select UserId as 呼叫員編號(hào),PhoneNumber as 對(duì)方號(hào)碼,
datediff(second,StartTime,EndTime) as 通話時(shí)長
from TableHuJiao
union allselect '匯總',convert(nvarchar(12),
sum
(
(case
when PhoneNumber not like '0%' then datediff(second,StartTime,EndTime)else 0
end)
))as 市內(nèi)通話,sum
(
(case
when PhoneNumber like '0%' then datediff(second,StartTime,EndTime)
else 0
end)) as 長途通話
from TableHuJiao
轉(zhuǎn)載于:https://www.cnblogs.com/xu-qian-gang/archive/2011/11/30/2268976.html
總結(jié)
- 上一篇: 1.4建立网站的基本流程
- 下一篇: 没有连接上aspnetdb.mdf数据库