1. 程式人生 > >SQL課堂筆記--聚合函數

SQL課堂筆記--聚合函數

into like 命名 desc 學費 學校 最小 sele server2


2017.11.13

聚合函數:
COUNT(*)統計表中元組個數
COUNT(屬性名)統計一列中列值的個數 //不統計空值
SUM計算一列值的總和(此列必須是數值行)
AVG計算一列的平均值(此列必須是數值行)
MAX求一列值中的最大值
MIN求一列值中的最小值
元組:每一條數據

例1.求計算機專業學生的平均年齡:
select avg(sage) as 平均年齡 from student where sdept=‘計算機‘

例2.統計學校共開設課多少們課程:
select count(*) from course
select count(cno) from course

例3.統計交了學費的學生人數:
select count(*) from course --統計所有的記錄:交了的沒交的都被統計了
select count(fees) from course --統計交了的學生個數,沒交的不統計

例4:如何去掉重復的項目再統計:
如:查詢選修了課程的學生人數
select count(distinct sno) from sc
註:用distinct以避免重復計算學生人數
(在access中不能用這種結構,在SQL server2008中可以)

ex:查詢選修課成績最高分,最低分和平均分,(查詢的列註意重命名為:最高分,最低分,平均分,
結果存放在新表abc中)
select MAX(grade) as 最高分 ,MIN (grade)最低分,AVG(grade) as 平均分 into abc from sc

order by 子句:

例5:將課程按學分升序排序:
select * from course order by credit
select * from course order by ccredit desc(降序)

例6:查詢選修了2課程的學生的學號和成績,查詢結果按成績降序排序:
select cno, sno,grade from sc where cno=2 order by grade desc

例7:查詢電子,計算機專業學生的姓名,專業名,結果按專業名升序,姓名降序排序:
order by後面可以跟多個字段進行排序:
用A1代表第一個字段,A2代表第二個字段
1.order by A1,A2 desc --A1升序,A2降序
2.order by A1 asc,A2 desc --A1升序,A2降序 asc可省略
3.order by A1 desc,A2 desc --A1,A2降序
select sname AS 姓名,sdept AS 系名 from student where sdept in(‘電子‘,‘計算機‘) order by sdept,sname desc

group by 子句(分組之後進行統計):

例8:查詢各門課程的選修人數:
select cno,count(*) from sc group by cno

例9:統計男女生各有多少人:
select ssex,count(ssex) as 人數 from student group by ssex

例10:求學生的總分:
select sno,sum(grade) as 總分 from sc group by sno

having 子句(已經分組後的元組,並不針對整張表,一般接到group by後使用):

例11:求選課在2門以上的學生,並統計平均成績:
select sno, avg(grade) as average from sc group by sno having count(*)>=2

例12:求選課在2門以上並且成績及格的學生,並統計平均成績:
select sno,avg(grade) as average from sc where grade>=60 group by sno having count(*)>=2 --這是錯誤的寫法
select sno,avg(grade) as average from sc group by sno having count(*)>=2 and min(grade)>=60 --對的

----所用的表是博客文件"student表"

練習:

-- 一、在商場銷售數據庫“Customer”中書寫SQL代碼進行查詢:
use Customer
go

--1、查詢顧客姓名以及聯系方式。
select 姓名,聯系方式 from 顧客

--2、查詢所有商品類別(結果中不能有重復的商品類別)。
select distinct 商品類別 from 商品

--3、查詢單價在100到200之間的商品名。
select 商品名 from 商品 where 單價>100 and 單價<200

--4、查詢單價在300以上的鞋類的商品名。
select 商品名 from 商品 where 商品類別=‘鞋子‘ and 單價>300

--5、查詢購買了C101,D201或E301商品號的顧客號(結果中顧客號不能有重復)。
select distinct 顧客號 from 購買 where 商品號 in(‘C101‘,‘D201‘,‘E301‘)

--6、查詢姓王的的顧客姓名和聯系方式。
select 姓名,聯系方式 from 顧客 where 姓名 like ‘王%‘

--7、查詢除姓劉的以外的顧客姓名和聯系方式。
select 姓名,聯系方式 from 顧客 where 姓名 not like ‘劉%‘


--二.在students數據庫中(已給出)用SQL查詢完成下面查詢:(書寫sql語句)
use students
go
--1、查詢考試成績有不及格學生的學號。
select sno from sc where grade<60

--2、將課程按學分升序排序。
select * from course order by ccredit

--3、查詢2號課程的成績在前3名學生的學號 。
select top 3 sno from sc where cno=2 order by grade desc

--4、查詢各門課程的選修人數。
select cno,count(*)as 人數 from sc group by cno

--5、統計男女生各有多少人。
select ssex,count(ssex) as 人數 from student group by ssex

--6、求各學生的總分。
select sno,sum(grade) as 總分 from sc group by sno

--7、求選課在2門以上並且成績及格的學生,並統計平均成績。
select sno,avg(grade) as average from sc group by sno having count(*)>=2 and min(grade)>=60

--8、查詢選修了2課程的學生的學號、課程號和成績,查詢結果按成績降序排序。
select sno,cno,grade from sc where cno=2 order by grade desc

--9、查詢專業人數少於2人的專業名稱及人數。
select sdept,COUNT(*) as 人數 from student group by sdept having COUNT(sdept)<2

--10、查詢女學生的姓名、專業名,結果按姓名升序排序,專業名降序。
select sname AS 姓名,sdept as 專業名 from student where ssex in(‘女‘)order by sname,sdept desc

SQL課堂筆記--聚合函數