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