--1 把日期转换成 月日年 的字符串的格式输出
select convert(nvarchar(50),GETDATE(),101)
--2 查询出每个销售员的销售总金额,以及总的销售金额(底部汇总)
use CsdnNET
select 销售员=销售员,SUM(销售数量*销售价格) as 销售总金额
from MyOrders group by 销售员
union all
select '汇总',SUM(销售数量*销售价格)
from MyOrders
--3 要求在一个表格中查询出学生的英语最高成绩、最低成绩,平均成绩
use CsdnNET
--(2)查询结果为3行
select '英语最高成绩' as 类型,MAX(FEnglish) as 分数
from MyStudents
union all
select '英语最低成绩',MIN(FEnglish)
from MyStudents
union all
select '英语平均成绩',AVG(FEnglish)
from MyStudents
---(1)查询结果为1行
select 英语最高成绩=MAX(FEnglish),英语最低成绩=MIN(FEnglish),英语平均成绩=AVG(FEnglish)
from MyStudents
--4 复制表(只要表结构,不要数据)
--(1)方法1
select * into NewStudent from MyStudents where 11
--(2)方法2
select top 0 * into New2Student from MyStudents
--5 把一个表的数据copy到另一个 已经用上面的方式生成的
SET IDENTITY_INSERT NewStudent on;
insert into NewStudent(FId,FName,FAge,FGender,FEnglish,FBirthday)
select FId,FName,FAge,FGender,FEnglish,FBirthday from MyStudents
SET IDENTITY_INSERT NewStudent off;
--6 创建一张表,记录电话呼叫员的工作流水,记录呼叫员编号、对方号码、通话开始时间、通话结束时间。建表、插数据等最后都自己写SQL语句。
select * from CallRecords
--(1)输出所有数据中通话时间最长的5条记录。orderby datediff
select top 5 *,datediff(ss,StartDateTime,EndDateTime) as '通话时长(s)' from CallRecords order by '通话时长(s)'desc
-- (2)输出所有数据中拨打长途号码(对方号码以0开头)的总时长。like、sum
select SUM(datediff(ss,StartDateTime,EndDateTime)) as 总时长 from CallRecords where TelNum like '0%'
-- (3)输出本月通话总时长最多的前三个呼叫员的编号。
select top 3 CallerNumber as 呼叫员的编号,SUM(DATEDIFF(second,StartDatetime,EndDateTime)) as 通话时长 from CallRecords
where datepart(MONTH,StartDatetime)=DATEPART(MONTH,getdate())
group by CallerNumber
order by SUM(DATEDIFF(second,StartDatetime,EndDateTime)) desc
-- (4)输出本月拨打电话次数最多的前三个呼叫员的编号group by,count(*)按照月份分组。
select top 3 CallerNumber,COUNT(*) as '接听次数' from CallRecords
where datepart(MONTH,StartDatetime)=DATEPART(MONTH,getdate())
group by CallerNumber
order by COUNT(*) desc;
select convert(nvarchar(50),GETDATE(),101)
--2 查询出每个销售员的销售总金额,以及总的销售金额(底部汇总)
use CsdnNET
select 销售员=销售员,SUM(销售数量*销售价格) as 销售总金额
from MyOrders group by 销售员
union all
select '汇总',SUM(销售数量*销售价格)
from MyOrders
--3 要求在一个表格中查询出学生的英语最高成绩、最低成绩,平均成绩
use CsdnNET
--(2)查询结果为3行
select '英语最高成绩' as 类型,MAX(FEnglish) as 分数
from MyStudents
union all
select '英语最低成绩',MIN(FEnglish)
from MyStudents
union all
select '英语平均成绩',AVG(FEnglish)
from MyStudents
---(1)查询结果为1行
select 英语最高成绩=MAX(FEnglish),英语最低成绩=MIN(FEnglish),英语平均成绩=AVG(FEnglish)
from MyStudents
--4 复制表(只要表结构,不要数据)
--(1)方法1
select * into NewStudent from MyStudents where 11
--(2)方法2
select top 0 * into New2Student from MyStudents
--5 把一个表的数据copy到另一个 已经用上面的方式生成的
SET IDENTITY_INSERT NewStudent on;
insert into NewStudent(FId,FName,FAge,FGender,FEnglish,FBirthday)
select FId,FName,FAge,FGender,FEnglish,FBirthday from MyStudents
SET IDENTITY_INSERT NewStudent off;
--6 创建一张表,记录电话呼叫员的工作流水,记录呼叫员编号、对方号码、通话开始时间、通话结束时间。建表、插数据等最后都自己写SQL语句。
select * from CallRecords
--(1)输出所有数据中通话时间最长的5条记录。orderby datediff
select top 5 *,datediff(ss,StartDateTime,EndDateTime) as '通话时长(s)' from CallRecords order by '通话时长(s)'desc
-- (2)输出所有数据中拨打长途号码(对方号码以0开头)的总时长。like、sum
select SUM(datediff(ss,StartDateTime,EndDateTime)) as 总时长 from CallRecords where TelNum like '0%'
-- (3)输出本月通话总时长最多的前三个呼叫员的编号。
select top 3 CallerNumber as 呼叫员的编号,SUM(DATEDIFF(second,StartDatetime,EndDateTime)) as 通话时长 from CallRecords
where datepart(MONTH,StartDatetime)=DATEPART(MONTH,getdate())
group by CallerNumber
order by SUM(DATEDIFF(second,StartDatetime,EndDateTime)) desc
-- (4)输出本月拨打电话次数最多的前三个呼叫员的编号group by,count(*)按照月份分组。
select top 3 CallerNumber,COUNT(*) as '接听次数' from CallRecords
where datepart(MONTH,StartDatetime)=DATEPART(MONTH,getdate())
group by CallerNumber
order by COUNT(*) desc;