關於面試總結1-SQL學生表


前言

每次面試必考SQL,小編這幾年一直吃SQ的虧,考題無非就是萬年不變學生表,看起來雖然簡單,真正寫出來,還是有一定難度。於是決定重新整理下關於SQL的面試題,也可以幫助更多的人過SQL這一關。
作為一個工作3年以上測試人員,不會sql基本上能拿到offer的希望渺茫,雖然平常也會用到數據庫,都是用的簡單的查詢語句。困難一點的就直接找開發了,面試想留個好印象,還是得熟練掌握,能在紙上快速寫出來。

  • 1.查詢所有學生的數學成績,顯示學生姓名name, 分數, 由高到低
  • 2.統計每個學生的總成績,顯示字段:姓名,總成績
  • 3.統計每個學生的總成績(由於學生可能有重復名字),顯示字段:學生id,姓名,總成績
  • 4.列出各門課程成績最好的學生, 要求顯示字段: 學號,姓名,科目,成績
  • 5.列出各門課程成績最好的2位學生, 要求顯示字段: 學號,姓名, 科目,成績

萬年不變學生表

有2張表,學生表(student)基本信息如下

科目和分數表(grade)

排序order by

1.查詢所有學生的數學成績,顯示學生姓名name, 分數, 由高到低

SELECT a.name, b.score
FROM student a, grade b
WHERE a.id = b.id
AND kemu = '數學'
ORDER BY score
DESC

統計總成績sum

2.統計每個學生的總成績,顯示字段:姓名,總成績

SELECT a.name, sum(b.score) as sum_score
FROM student a, grade b
WHERE a.id = b.id
GROUP BY name
DESC

統計總成績

3.統計每個學生的總成績(由於學生可能有重復名字),顯示字段:學生id,姓名,總成績

SELECT a.id, a.name, c.sum_score
from student a, 
(SELECT b.id, sum(b.score) as sum_score
FROM grade b
GROUP BY id
) c
WHERE a.id = c.id
ORDER BY sum_score
DESC

統計單科最好成績

4.列出各門課程成績最好的學生, 要求顯示字段: 學號,姓名,科目,成績

第一步先group by找出單科最好成績,作為第一張表

SELECT b.kemu, MAX(b.score)
FROM grade b
GROUP BY kemu

再結合學生表和分數表,得到單科最好成績

-- 單科最好的成績
SELECT c.id , a.name, c.kemu, c.score

FROM grade c, student a,
(SELECT b.kemu, MAX(b.score) as max_score
FROM grade b
GROUP BY kemu) t
WHERE c.kemu = t.kemu
AND c.score = t.max_score
AND a.id = c.id

總結 group by相關用法

函數 作用 支持性
sum(列名) 求和
max(列名) 最大值
min(列名) 最小值
avg(列名) 平均值
first(列名) 第一條記錄 僅Access支持
last(列名) 最后一條記錄 僅Access支持
count(列名) 統計記錄數 注意和count(*)的區別

各門課程成績最好的2位學生

5.列出各門課程成績最好的2位學生, 要求顯示字段: 學號,姓名, 科目,成績

SELECT t1.id, a.name, t1.kemu,t1.score
FROM grade t1, student a
WHERE
	(SELECT count(*) FROM grade t2 
	WHERE t1.kemu=t2.kemu AND t2.score>t1.score
	)<2
and a.id = t1.id
ORDER BY t1.kemu,t1.score 
DESC

交流QQ群:779429633


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM