- count(列名): 求某列的行數,不包含空值(null); count(*) 求全部的行數,包含空值(null)
- sum(列名): 對某列資料求和,隻能對數值類型的列計算
- avg(列名): 求某列資料的平均值,隻能對數值類型的列計算
- max(列名): 求某列資料的最大值
- min(列名): 求某列資料的最小值
- 注意
- 如果輸入的是列名,在計算前會将空值Null排除在外。
- 如果在彙總時不想計算重複值,在彙總函數前面加distinct,先删除重複值在計算。
:
sum, avg, max, minselect sum(成績), avg(成績), min(成績), max(成績)
from score;
distinct 去除重複值 select count(distinct 姓名)
from student;
練習:彙總分析 - 查詢課程編号為“0002”的總成績
- 查詢選了課程的學生人數
- from:從哪張表中查詢資料
- where:查詢條件
- group by:分組
- select:查詢結果
- 查詢各科成績最高和最低的分
- 查詢每門課程被選修的學生數
- 查詢男生、女生人數
1.from:從那張表中查詢資料
2.where:查詢條件
3.group by:分組
4.having:對分組結果指定查詢條件
5.select:查詢結果
練習:- 查詢平均成績大于60分學生的學号和平均成績
- 查詢至少選修兩門課程的學生學号
- 查詢同名同姓學生名單并統計同名人數
1.翻譯成大白話
2.寫出分析思路
3.寫出對應的sql 子句
練習:如何計算每門課程的平均成績,并且平均成績大于等于80分 1.翻譯問題如題目,無需翻譯
2.分析思路select 查詢結果,每門課程号、平均成績avg(成績)
from 從哪張表查詢資料,score表
where 查詢條件,無
group by 分組,以每個課程号作為分組條件
having 對分組結果指定條件,平均成績>=80
3.寫出sqlselect 課程号,avg(成績) from score
group by 課程号
having avg(成績)>=80;
總結:1.當我們看到關鍵字“每”,如每組,每個...需要用分組;
2.當我們看到關鍵字平均、個數,最大、最小...需要用彙總;
3.當我們看到關鍵字大于、小于、等于...需要用查詢條件。
五.對查詢結果排序 order by + asc/desc
1.降序desc:從大到小
2.升序asc:從小到大,預設的排序
- 同時我們也可以指定多個排序列名 order by <列名1> asc,<列名2> desc;
- 對于 含有空值(null)的列排序時 ,空值會在查詢結果開頭顯示,友善查詢表格中空值的情況
1.from:從那張表中查詢資料
2.where:查詢條件
3.group by:分組
4.having:對分組結果指定查詢條件
5.select:查詢結果
6.order by:對查詢結果排序;
- limit子句
從查詢結果中取出指定行,我們引入新的子句
limit 加入了limit子句,我們新的sql執行順序為:1.from:從那張表中查詢資料
2.where:查詢條件
3.group by:分組
4.having:對分組結果指定查詢條件
5.select:查詢結果
6.order by:對查詢結果排序
7.limit:從查詢結果中取出指定行
練習: 1.查詢不及格的課程并按照課程号從大到小排 2.查詢每門課程的平均成績,結果按平均成績升序排列。平均成績相同時,按課程号降序排列 六.如何看懂報錯資訊- 常見錯誤1:
因為select子句在group by/having子句之後執行,是以引用别名會報錯
- 常見錯誤2:
在where子句用彙總函數運作會報錯
- 常見錯誤3:
把表中要進行計算的列資料類型修改為數值之後在進行相關操作
繼續sqlzoo練習(相對簡單的入門難度sql,練習一下吧)SELECT from Nobel Tutorial
SELECT from nobel
SELECT from nobel