Mysql查詢重複數據(字段)取其中一條

今天在開發時,遇到一個小需求,大概需求是:mysql

  • 描述:有一張mysql單表,表中有10W+的數據,主鍵ID爲自增。sql

  • 備註:可能存在幾條數據部分字段相同。markdown

  • 需求:根據必定條件查詢數據,若是查詢結果中有備註的數據存在。則過濾重複字段的數據,取ID最大的一條數據。函數

不知道我說的明白不,舉個栗子吧,哈哈哈,這樣一目瞭然。學習

有一張學生成績表tb_student_achievement,多個學生可能存在age和grade都相同的狀況ui

id sex name age grade
1 張三 15 90
2 李四 16 95
3 王五 15 90
4 趙六 16 95
5 馮七 14 100
6 郭八 15 98
7 ... ... ... ...
  • 需求:找出班級中男生的成績,並按照成績從高到低排序,若是年齡和成績都相同,則取ID最大的一條便可。
  • 須要的結果以下:
id sex name age grade
5 馮七 14 100
4 趙六 16 95
3 王五 15 90
  • 思路:
    • 首先咱們的查詢條件爲sex=男;
    • 咱們須要按照年齡和成績分組,須要過濾年齡和成績都相同的重複數據;
    • 過濾結果須要取出ID最大的那條數據;
    • 返回數據全部列的信息;

下面爲查詢SQL:spa

SELECT a.*
  FROM tb_student_achievement a,
       (
SELECT MAX(id)  as id
  FROM tb_student_achievement
 WHERE sex= '男'
 GROUP BY `age`, `grade`) b
 WHERE a.id= b.id
 ORDER BY a.grade DESC;
複製代碼

固然,若是有重複數據要取ID最小的只須要修改max函數爲min便可,其餘狀況依據思路修改就好啦。code

  • 歡迎留下更加簡單的sql語句呦,共同窗習。
相關文章
相關標籤/搜索