select count(*) from返回的类型_数据分析面试题类型汇总
1 簡單查詢
- 基本的查詢語句:select <列名> from 表名 where 條件- where 后的條件需要標量,不可以使用集合,若與關聯子查詢連用可用;可使用邏輯運算符連接多個條件:between、and、or、in()、not(不常用)- 模糊條件查詢like,常用于where后,“%”表示不定長度的字符串,“_”表示一個字符
- 已知首字符查詢,where 姓名 like '猴%'
- 已知末尾字符查詢,where 姓名 like '%猴'
- 已知數據中的部分字符查詢,where 姓名 like '%猴%'
2 匯總分析
2.1 匯總
- sum、avg、max、min等函數可用在select,新增查詢列,根據函數對列數據計算,并且通過“as”語句對查詢列命名。
- 計數匯總時,注意去重(distinct),count、distinct經常連用:
count(distinct <列名>)。
1)查詢課程編號為“0002”的總成績
- 查詢條件是課程號=“0002”,總成績:sum(成績)
2)查詢選了課程的學生人數
- 選了課程的學生:score表,所有學生數量(表中每個學生都有選課,課程號無空值)
- 學生人數:score表,學生會選擇多個課程,使用distinct避免重復,count計數,即count(distinct 學號)
2.2 分組
- 對數據分組使用:group by <列名>- 看到“各(課)”,“每(門)”考慮使用分組。
- 分組后要顯示匯總結果,不能在select輸入“*”
1)查詢各科成績最高和最低的分
- 各科成績:score表,按照課程號分組
- 最高分:分組中成績最大值;最低分:分組中成績最小值
2)查詢每門課程被選修的學生數
- 每門課程:score表,按課程號分組;
- 課程被選修的學生數:一個課程有多少學生選擇,計算分組內學生數量,count(學號)
3)查詢男生、女生人數
- student表,按照性別分組,分別對每個組(性別)的學號計數
2.3 分組結果的條件
- 使用 having 語句,用在 group by 之后:group by <列名> having 對結果設定的條件- having 后的條件可以用匯總函數
1)查詢平均成績大于60分學生的學號
- 學生平均成績:按照學號分組,
- 分組結果條件:分組平均成績大于60分
2)查詢至少選修兩門課程的學生學號
- 至少選修兩門課程:按照學生(學號)分組,count匯總每個學生選課數量,數量大于等于2
3)查詢同名同姓學生名單并統計同名人數
- 同名同姓同學:按學生姓名分組
- 統計同名人數:分組后統計組內人數,即同一個姓名的人數,人數>=2表示有同姓名
2.4 排序
- order by <列名> desc/asc,desc降序,asc升序- 當對多個字段排序時,按先后順序錄入,使用英文逗號分隔“,”
- limit <數字>,對排序后的結果,顯示前幾行
- 語句運行順序,①from…where…group by…(having…) ②select ③order by 排序最后
1)查詢不及格的課程并按課程號從大到小排列
- 不及格課程:成績<60
- 課程號從大到小排列:按課程號降序排列
2)查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列
- 每門課程平均成績:按課程分組,求每組成績的平均值
- 排序方式:先按平均成績升序,再按課程號降序
3)檢索課程編號為“0004”且分數小于60的學生學號,結果按分數降序排列
- 課程編號為“0004”:where 課程號 = '0004'
- 分數小于60:成績 < 60
- 排序:按成績降序排列
4)統計每門課程的學生選修人數(超過2人的課程才統計),輸出課程號和選修人數,按人數降序排列,若人數相同,按課程號升序排列
- 每門課程的學生選修人數:按照課程號分組,對學號計數,人數>2
- 排序方式:先按選課人數降序,再按課程號升序
5)查詢兩門以上不及格課程的同學的學號,以及不及格課程的平均值
- 兩門以上、不及格課程的同學:按學號分組(group by),并且篩選不及格(成績<60)的科目(where);對分組、篩選后的科目成績計數(count),科目計數的數量>2
整理順序:篩選不及格成績 - 按學號分組 - 對不及格成績計數 - 求不及格平均成績 - 不及格課程的平均值:對分組后的數據查詢平均值
3 復雜查詢
子查詢——返回多行值- 通過一個表中的數據調取另一個表的數據;
- in與子查詢連用,舉例:where 學號 in 符合條件的學號
標量子查詢——返回單一值
關聯子查詢——返回同一組符合條件的一個值
where a.學號 = b.學號
1)分組取每組小于某個值的數據
案例:查詢所有課程成績小于60分學生的學號、姓名
- 查詢結果:學生學號、姓名;查詢表:student;查詢條件:符合條件的學號
- 子查詢:對應“符合條件的學號”,where 學號 in 符合條件的學號;
條件分析:所有課程成績<60的學生,即一個學生選的課程數<60,找到符合條件的所有學生;
查詢結果:學號;查詢表:score;分組:按學號分組;分組結果條件:學生選的課程數<60。
2)分組取每個組個數不完整的組名
案例:查詢沒有學全所有課的學生的學號和姓名
- 查詢結果:學生的學號、姓名;查詢表:student;查詢條件:符合條件的學號
- 子查詢1:對應“符合條件的學號”,where 學號 in 符合條件的學號;
條件分析:沒有選全所有課程的學生,學生選的課程數<所有的課程數;
查詢結果:學號;查詢表:score;分組:按學生分組;分組結果條件:學生選的課程數<所有課程數; - 子查詢2:對應“所有課程數”,是標量子查詢
查詢結果:課程數量;查詢表:course
3)分組取每組個數等于定值的組名
案例:查詢出只選修了兩門課程的全部學生的學號和姓名
- 查詢結果:學號、姓名;查詢表:student;查詢條件:where 學號 in 符合條件的學號
- 子查詢:對應符合條件的學號,條件:只選修了兩門課程
查詢結果:學號;查詢表:score;分組:按學生分組;分組結果條件:學生選課數=2
4)日期轉換
案例:1990年出生的學生名單
- 查詢結果:學號、姓名;查詢表格:student;查詢條件:出生年=1990,表格中是出生日期,將出生日期使用 year() 得到出生年份
TopN問題
分組取每組最大值、最小值,每組最大的N條記錄。
例如:每個類別下用戶最喜歡的產品是哪個?每個類別下用戶點擊最多的5個商品是什么?
5)分組取每組最大值
案例:按課程號分組取成績最大值所在行的數據
- 查詢結果:所有字段;查詢表:score as a ;條件:按課程號分組,成績=每組成績的最大值
- 每組成績最大值:
查詢結果:max(成績);查詢表:score as b ;條件:a的課程號=b的課程號,
6)分組取每組最小值
案例:按課程號分組取成績最小值所在行的數據
7)每組最大的N條記錄
案例:查詢各科成績前兩名記錄
4 多表查詢
多表聯結inner/left/right/full join on 關系條件
- inner join 不符合關聯條件的部分不選擇
- left join / right join 保留左/右數據,另一個表不符合關聯條件的部分為null
case 表達式
case when 條件 then 結果1 else 結果2 end
常與select連用,新增查詢列
1)在表A,不在表B的數據
案例:不是近視眼的學生有誰?
2)聯結表B,查詢表A
案例:查詢所有學生的學號、姓名、選課數、總成績
3)條件篩選表B,查詢表A
案例:查詢平均成績大于85的所有學生的學號、姓名和平均成績
4)三表聯結
案例:查詢學生選課情況:學號、姓名、課程號、課程姓名
5)分組條件匯總(case表達式)
案例:查詢每門課程的及格人數和不及格人數
6)表聯結+分組條件匯總(case表達式、XX join)
案例:使用分段[100-85],[85-70],[70-60],[?60]來統計各科成績,分別統計:各分數段人數,課程號和課程名稱
7)多條件表聯結
案例:查詢課程編號為0003且課程成績在80分以上的學生的學號和姓名
8)行列互換
案例:將下表1轉換為表2
5 提高SQL查詢效率
寫sql時要注意盡量減少全表搜索操作,從而提高查詢效率:
1)select 子句中,盡量避免使用“*”,只提取需要的列
2)where 子句,比較符左側避免函數,統一轉移到右邊實現
舉例:where 成績 + 5 ? 90 (表達式在比較符號的左側)優化成:where 成績 ? 90 – 5(表達式在比較符號的右側)3)盡量避免使用in、not in,in可使用 between…and 替換
舉例:查看第8、9個人的學號和成績where 學號 in (8, 9) 優化成:where 學號 between 8 and 94)盡量避免使用 or ,可用union替換
從成績表中選出成績是是88分或89分學生的學號: select 學號 from 成績表 where 成績 = 88 or 成績 = 89優化后: select 學號 from 成績表 where 成績 = 88 union select 學號 from 成績表 where 成績 = 895)使用limit子句限制返回的數據行數
總結
以上是生活随笔為你收集整理的select count(*) from返回的类型_数据分析面试题类型汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 执行计划 分析一条sql语句的效率 my
- 下一篇: 简述使用计算机对会计工作的影响,简述使用