sql倒序排列取第一条_从零学会SQL·三——汇总分析
一、常用匯總函數(shù)的練習(xí)
score表問題:
- 查詢課程編號(hào)為“0002”的總成績(jī)
- 查詢選了課程的學(xué)生人數(shù)
- 查詢學(xué)號(hào)為“0001”的學(xué)生的最高分、最低分和平均分
解答SQL語(yǔ)句如下:
-- 查詢課程編號(hào)為“0002”的總成績(jī) SELECT 學(xué)號(hào),SUM(成績(jī))FROM score WHERE `課程號(hào)`='0002';-- 查詢選了課程的學(xué)生人數(shù) SELECT COUNT(DISTINCT 學(xué)號(hào))FROM score WHERE `課程號(hào)` IS NOT NULL;-- 查詢學(xué)號(hào)為“0001”的學(xué)生的最高分 SELECT 學(xué)號(hào),MAX(成績(jī)),MIN(成績(jī)),AVG(成績(jī))FROM score WHERE `學(xué)號(hào)`='0001';二、分組練習(xí)
student表score表問題:
- 查詢各科成績(jī)的最高分和最低分
- 查詢每門課程被選修的學(xué)生數(shù)
- 查詢男生、女生的人數(shù)
解答SQL語(yǔ)句如下:
-- 查詢各科成績(jī)的最高分和最低分 SELECT 課程號(hào),MAX(成績(jī)),MIN(成績(jī))FROM score GROUP BY `課程號(hào)`;-- 查詢每門課程被選修的學(xué)生數(shù) SELECT 課程號(hào),COUNT(DISTINCT 學(xué)號(hào))FROM score GROUP BY `課程號(hào)`;-- 查詢男生、女生的人數(shù) SELECT 性別,COUNT(DISTINCT 性別)FROM student GROUP BY `性別`;三、給分組結(jié)果指定條件的練習(xí)
student表score表問題:
- 查詢平均成績(jī)大于60分學(xué)生的學(xué)號(hào)和平均成績(jī)
- 查詢至少選修兩門課程的學(xué)生學(xué)號(hào)
- 查詢姓名相同的學(xué)生名單并統(tǒng)計(jì)同名人數(shù)
解答:
SQL語(yǔ)句如下:
-- 查詢平均成績(jī)大于60分學(xué)生的學(xué)號(hào)和平均成績(jī) SELECT 學(xué)號(hào),AVG(成績(jī)) AS 平均成績(jī)FROM score GROUP BY `學(xué)號(hào)`HAVING AVG(`成績(jī)`)>60;-- 查詢至少選修兩門課程的學(xué)生學(xué)號(hào) SELECT 學(xué)號(hào),COUNT(課程號(hào)) AS 選修課程數(shù)FROM score GROUP BY `學(xué)號(hào)`HAVING COUNT(`課程號(hào)`)>=2;-- 查詢姓名相同的學(xué)生名單并統(tǒng)計(jì)同名人數(shù) SELECT 姓名,COUNT(姓名) AS 同名人數(shù) FROM student GROUP BY `姓名` HAVING COUNT(`姓名`)>=2;四、用SQL解決業(yè)務(wù)問題的解題思路
score表問題:
查詢出平均成績(jī)?cè)?0分及以上的課程,并寫出分析思路。
解答:
求出每一門課程的平均成績(jī),然后選出平均成績(jī)?cè)?0分及以上的課程
2. 第二步,明確分析思路
分析思路3. 第三步,寫SQL語(yǔ)句
-- 查詢出平均成績(jī)?cè)?0分及以上的課程,并寫出分析思路 SELECT 課程號(hào),AVG(成績(jī)) AS 平均成績(jī) -- 第四步:查詢結(jié)果顯示課程號(hào),平均成績(jī)FROM score -- 第一步:從score表中查找數(shù)據(jù)GROUP BY `課程號(hào)` -- 第二步:按課程號(hào)分組HAVING AVG(`成績(jī)`)>=80; -- 第三步:給分組結(jié)果指定條件為平均成績(jī)>=80五、排序練習(xí)
score表問題:
寫出下列問題對(duì)應(yīng)的SQL語(yǔ)句,并畫出運(yùn)行順序
解答:
題1~4答案:
-- 查詢不及格的課程,并按課程號(hào)從大到小排列 SELECT 課程號(hào),成績(jī) -- 第三步,查詢出成績(jī)<60分的課程號(hào)和成績(jī)FROM score -- 第一步,從score表中查詢數(shù)據(jù)WHERE `成績(jī)`<60 -- 第二步,查詢條件是成績(jī)<60分 ORDER BY `課程號(hào)` DESC; -- 第四步,對(duì)查詢結(jié)果按課程號(hào)降序排序/*查詢每門課程的平均成績(jī),結(jié)果按平均成績(jī)升序排序; 平均成績(jī)相同時(shí),按課程號(hào)降序排序*/ SELECT 課程號(hào),AVG(成績(jī)) AS 平均成績(jī) -- 第三步,對(duì)分組后的課程計(jì)算每門課程的平均成績(jī),并把列名“AVG(成績(jī))”命名為“平均成績(jī)”FROM score -- 第一步,從score表中查詢數(shù)據(jù)GROUP BY `課程號(hào)` -- 第二步,按課程號(hào)分組 ORDER BY 平均成績(jī) ASC ,`課程號(hào)` DESC ; -- 第四步,按照課程的平均成績(jī)升序排序,當(dāng)平均成績(jī)相同時(shí)按照課程號(hào)降序排序-- 查詢課程編號(hào)為“0003”且成績(jī)>90的學(xué)生學(xué)號(hào),結(jié)果按按分?jǐn)?shù)降序排列 SELECT 學(xué)號(hào),成績(jī) -- 第三步,查詢結(jié)果顯示學(xué)號(hào)和成績(jī)FROM score -- 第一步,從score表中查詢數(shù)據(jù)WHERE `課程號(hào)`='0003' AND `成績(jī)`>=80 -- 第二步,查詢條件是課程號(hào)為0003并且成績(jī)>=80 ORDER BY `成績(jī)` desc ; -- 對(duì)查詢結(jié)果按照成績(jī)進(jìn)行倒序排序/*統(tǒng)計(jì)每門課程的學(xué)生選修人數(shù)(超過2人的課程才統(tǒng)計(jì)), 要求輸出課程號(hào)和選修人數(shù),查詢結(jié)果按人數(shù)降序排序;若人數(shù)相同,按課程號(hào)升序排序*/ SELECT 課程號(hào),COUNT(學(xué)號(hào)) AS 選修人數(shù) -- 第四步,查詢結(jié)果顯示課程號(hào)和“COUNT(學(xué)號(hào))”,并把“COUNT(學(xué)號(hào))”命名為“選修人數(shù)”FROM score -- 第一步,從score表中查詢數(shù)據(jù)GROUP BY `課程號(hào)` -- 第二步,按照課程號(hào)分組HAVING COUNT(`學(xué)號(hào)`)>2 -- 給分組指定條件,選修該課程超過2人 ORDER BY 選修人數(shù) DESC ,`課程號(hào)` ASC ; -- 對(duì)查詢結(jié)果按照選修人數(shù)進(jìn)行倒序排序,如果選修人數(shù)相同,則按照課程號(hào)進(jìn)行升序排序題5較為復(fù)雜,下面詳細(xì)解答:
(1)翻譯題目,理解題目
先將題目逐個(gè)拆解:
查詢“至少兩門”“課程成績(jī)優(yōu)秀”的【同學(xué)學(xué)號(hào)】及其“成績(jī)優(yōu)秀的課程”的【平均成績(jī)】
也就是:
(2)確定分析思路
select -- 查詢結(jié)果:學(xué)號(hào),avg(成績(jī)) as 平均成績(jī)
from -- 從哪張表查找數(shù)據(jù):score
where -- 限制條件:沒有
group by -- 分組:按學(xué)號(hào)分組
having --給分組指定條件:沒有
order by -- 排序:沒有
limit -- 指定行數(shù):沒有
查詢語(yǔ)句如下:
SELECT 學(xué)號(hào),AVG(成績(jī)) AS 平均成績(jī)FROM score GROUP BY `學(xué)號(hào)`;2. 第二步:加上限制條件
① 給“學(xué)號(hào)”加上“課程成績(jī)優(yōu)秀”——查詢限制條件where
② 給“平均成績(jī)”加上“成績(jī)優(yōu)秀的課程”——查詢限制條件where
③ 給“課程成績(jī)優(yōu)秀”加上“至少2門”——在查詢限制條件where的基礎(chǔ)上給分組指定條件having
select -- 查詢結(jié)果:學(xué)號(hào),avg(成績(jī)) as 平均成績(jī)
from -- 從哪張表查找數(shù)據(jù):score
where -- 限制條件:成績(jī)>=90
group by -- 分組:按學(xué)號(hào)分組
having --給分組指定條件:count(課程號(hào))>=2
order by -- 排序:沒有
limit -- 指定行數(shù):沒有
查詢語(yǔ)句如下:
SELECT 學(xué)號(hào),AVG(成績(jī)) AS 平均成績(jī)FROM score WHERE `成績(jī)`>=90GROUP BY `學(xué)號(hào)`HAVING COUNT(`課程號(hào)`)>=2;總結(jié)
以上是生活随笔為你收集整理的sql倒序排列取第一条_从零学会SQL·三——汇总分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用OpenCV进行图像全景拼接全景图像
- 下一篇: sql datetime 排序_超全的数