標籤:

SQL Practice - July 13,18

SQL Practice - July 13,18

題目來源:整理的一些 SQL 面試題 (Q2)

學生表 如下:

自動編號 學號 姓名 課程編號 課程名稱 分數

1 2005001 張三 0001 數學 69

2 2005002 李四 0001 數學 89

3 2005001 張三 0001 數學 69

刪除除了自動編號不同,其他都相同的學生冗餘信息


我的答案:

delete table1from table1, table2where table1.自動編號 > table2.自動編號 and table1.學號 = table2.學號 and table1.姓名 = table2.姓名 and table1.課程編號 = table2.課程編號 and table1.課程名稱 = table2.課程名稱 and table1.分數 = table2.分數;

參考了之前做過的這道題:Delete Duplicate Emails

但就是覺得where條件太過冗長了,難道有幾十個欄位的時候我也這麼寫?不寫死了?所以我覺得以下的參考答案應該更簡潔。

參考答案:

delete tablename where 自動編號 not in(select min(自動編號) from tablename group by 學號,姓名,課程編號,課程名稱,分數);

這段代碼里有兩個重點:1)min的使用,可以確保被刪掉的是id更大的冗餘數據;2)group by,如果每一個欄位都一致,那這些冗餘數據就會被合併成一條。

推薦閱讀:

知識布局-mysql-組內排序
一條SQL搞定信息增益的計算
QuickBI助你成為分析師-數據建模(一)
一張圖讓你詳細理解Group By的分組聚合過程
RODBC:ODBC Database Access

TAG:SQL | SQL語句 |