python接口自動化+測試開發面試題


關於面試總結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

 
標簽:  面試題
好文要頂  關注我  收藏該文   
5
0
 
 
 
« 上一篇:  python測試開發django-10.django連接mysql
» 下一篇:  關於面試總結2-SQL學生表
posted @  2018-12-04 17:45  上海-悠悠  閱讀(4672)  評論(3)  編輯  收藏

 

 
#1樓  2019-10-10 17:58 | 候鳥遷徙的信念
第5題,看不太懂呀
#2樓  [ 樓主] 2019-10-10 22:29 | 上海-悠悠
@ 候鳥遷徙的信念
看不懂就跳過吧,考試不會考
#3樓  2020-04-10 18:19 | vini

數據表
創建學生數據表
CREATE TABLE students(
stu_id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(32) NOT NULL,
stu_age INT NOT NULL
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
插入數據
INSERT INTO students(stu_id, stu_name, stu_age)
VALUES(1001, "張三", 18), (1002, "張四", 19), (1003, "張五", 20),
(1004, "張六", 19), (1005, "張六", 18);
創建成績數據表
CREATE TABLE transcripts(
tscp_no INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
tscp_id INT(4) NOT NULL,
tscp_subject VARCHAR(32) NOT NULL,
tscp_score FLOAT NOT NULL,
foreign key(tscp_id) references students(stu_id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
插入數據
INSERT INTO transcripts(tscp_no, tscp_id, tscp_subject, tscp_score)
VALUES( 1, 1001, "語文", 85), ( 2, 1001, "數學", 86), ( 3, 1002, "英語", 98),
( 4, 1002, "語文", 94), ( 5, 1002, "數學", 98), ( 6, 1003, "數學", 56),
( 7, 1003, "語文", 69), ( 8, 1003, "英語", 68), ( 9, 1004, "英語", 99),
(10, 1004, "數學", 97), (11, 1005, "數學", 93), (12, 1005, "英語", 45);
01、查詢所有學生的數學成績,顯示學生姓名、科目和分數,由高到低;
語句一
SELECT s.stu_name, t.tscp_subject, t.tscp_score
FROM students s, transcripts t WHERE t.tscp_id = s.stu_id AND t.tscp_subject = "數學"
ORDER BY t.tscp_score DESC;
語句二
SELECT s.stu_name, t.tscp_subject, t.tscp_score FROM transcripts t
INNER JOIN students s ON t.tscp_id = s.stu_id AND t.tscp_subject="數學"
ORDER BY t.tscp_score DESC;

02、統計每個學生的總成績,顯示字段:姓名和總成績;
語句一
SELECT s.stu_name, SUM(t.tscp_score) AS tscp_all_score
FROM students s, transcripts t WHERE s.stu_id = t.tscp_id GROUP BY t.tscp_id;
語句二
SELECT s.stu_name, SUM(t.tscp_score) AS tscp_all_score FROM transcripts t
INNER JOIN students s ON t.tscp_id = s.stu_id GROUP BY t.tscp_id;

03、統計每個學生的總成績(由於學生可能有重復名字),顯示字段:學生ID、姓名和總成績;
SELECT s.stu_id, s.stu_name, SUM(t.tscp_score) AS tscp_all_score FROM transcripts t
INNER JOIN students s ON t.tscp_id = s.stu_id GROUP BY t.tscp_id;

04、列出各門課程成績最好的學生,要求顯示字段: 學號、姓名、科目和成績;
SELECT s.stu_id, s.stu_name, t.tscp_subject, MAX(t.tscp_score) FROM transcripts t
INNER JOIN students s ON t.tscp_id = s.stu_id GROUP BY t.tscp_subject;

05、列出各門課程成績最好的兩位學生,要求顯示字段: 學號、姓名、科目和成績。
SELECT s.stu_id, s.stu_name, t1.tscp_subject, t1.tscp_score FROM transcripts t1
INNER JOIN students s ON t1.tscp_id = s.stu_id
LEFT JOIN transcripts t2 ON t1.tscp_subject = t2.tscp_subject AND t1.tscp_score ⇐ t2.tscp_score
GROUP BY t1.tscp_subject, t1.tscp_score HAVING COUNT(t2.tscp_score) < 3
ORDER BY t1.tscp_subject, t1.tscp_score DESC;

第五題參考博客:http://blog.sina.com.cn/s/blog_53d137da0102wx9t.html

步驟一

SELECT s.stu_id, s.stu_name, t1.tscp_subject, t1.tscp_score FROM transcripts t1
INNER JOIN students s ON t1.tscp_id = s.stu_id
ORDER BY t1.tscp_subject, t1.tscp_score DESC;

步驟二

SELECT s.stu_id, s.stu_name, t1.tscp_subject, t1.tscp_score, t2.tscp_score FROM transcripts t1
INNER JOIN students s ON t1.tscp_id = s.stu_id
LEFT JOIN transcripts t2 ON t1.tscp_subject = t2.tscp_subject AND t1.tscp_score ⇐ t2.tscp_score
ORDER BY t1.tscp_subject, t1.tscp_score DESC;

步驟三

SELECT s.stu_id, s.stu_name, t1.tscp_subject, t1.tscp_score, t2.tscp_score FROM transcripts t1
INNER JOIN students s ON t1.tscp_id = s.stu_id
LEFT JOIN transcripts t2 ON t1.tscp_subject = t2.tscp_subject AND t1.tscp_score ⇐ t2.tscp_score
GROUP BY t1.tscp_subject, t1.tscp_score HAVING COUNT(t2.tscp_score) < 3
ORDER BY t1.tscp_subject, t1.tscp_score DESC;

步驟四

SELECT s.stu_id, s.stu_name, t1.tscp_subject, t1.tscp_score FROM transcripts t1
INNER JOIN students s ON t1.tscp_id = s.stu_id
LEFT JOIN transcripts t2 ON t1.tscp_subject = t2.tscp_subject AND t1.tscp_score ⇐ t2.tscp_score
GROUP BY t1.tscp_subject, t1.tscp_score HAVING COUNT(t2.tscp_score) < 3
ORDER BY t1.tscp_subject, t1.tscp_score DESC;


免責聲明!

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



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