1. 程式人生 > 實用技巧 >五道sql面試真題

五道sql面試真題

前言

此為真題,瞭解面試 是如何考察sql的

一、

在這裡插入圖片描述
可以查詢每名同學的最小分數,若最小分數大於80則符合題意 :
1.根據學員分組,看每個人的最低分
Select name,min(score) from mst_stu group by name;
在這裡插入圖片描述
2.使用分組過濾 having 篩選出 符合要求的資料。
Select name,min(score)as min_s from mst_stu group by name having min_s >80 ;

二、

在這裡插入圖片描述
思路是 單表單中自己的資料需要和自己的資料做比較,想到自聯結的比較:
Select s1.,s2. from mst_weather as s1 join mst_weather as s2;

(此時沒有聯結條件,新的表為s1,s2的笛卡爾積)
在這裡插入圖片描述

只需加上兩個條件,程式碼實現:
Datediff()函式:計算兩個日期之間的差值,前減後。
Select s1.,s2. from mst_weather as s1 join mst_weather as s2 on datediff(s1.date,s2.date)=1 and s1.temperature >s2.temperature。

在這裡插入圖片描述
1.先查詢每個主播的最大level
Select zhubo_id,max(level) from mst_zhubo group by zhubo_id;

2.查詢出每個主播所有符合最大level的資料

Select *from mst_zhubo where(zhubo_id,level) in (Select zhubo_id,max(level) from mst_zhubo group by zhubo_id);注意:此時where的用法,where後面有兩個欄位,則in後面返回的資料也必須為兩個欄位。

3.然後再對該表分組,統計最小gap即可,程式碼實現:
Select zhubo_id,level,min(gap) from mst_zhubo where(zhubo_id,level) in (Select zhubo_id,max(level) from mst_zhubo group by zhubo_id) group by zhubo_id ,level;

在這裡插入圖片描述
經典行轉列型別,簡單的欄位新增即可:
Select class_id, max(case when grade = ‘primary’ then rate else 0 end) as ‘primary’,
max(case when grade = ‘middle’ then rate else 0 end) as ‘middle’,
max(case when grade = ‘high’ then rate else 0 end) as ‘high’
From mst_class group by class_id;

在這裡插入圖片描述
考察修改資料操作。
注意:update 後面是可以進行任何查詢語句,這個作用同等於from。
Update更新表,不能再set和where中用於子查詢 即下面的up表不能再select語句中。
Uptate 也可以對多個表進行更新(sqlserver不行)。
1.先按題意設計表
Create table ‘msta’(
‘key’ varchar(10),’value’ varchar(10)
);
Create table ‘mstb’(
‘key’ varchar(10),’value’ varchar(10)
);

Insert into msta values(‘A’,’aaa’),(‘B’,’bbb’),(‘C’,’ccc’);
Insert into msta values(‘A’,’???’),(‘d’,’dwd’),(‘e’,’ccc’);

程式碼實現:update mst_b as up,
(
Select msta.,mstb. from msta join mstb on msta.key=mstb.key;
) as b
set up.value=b.value where up.key=b.key;