mysql常見的查詢語句的應用

一決威嚴-雪雪發表於2020-12-17

單表操作

1.單欄位條件分組查詢

//獲取同名的人的詳細資訊

//獲取同分數的人的詳細資訊

//獲取同地區的人的姓名

 

分析:獲取相同的欄位,欄位條件和分組條件一致,通過where的欄位可以獲取到條目,屬於單欄位條件查詢

解://獲取同名的人的詳細資訊  

SELECT * FROM test1 WHERE NAME IN (SELECT NAME FROM test1 GROUP BY NAME HAVING COUNT(NAME)>1)


 

 

2.多欄位條件分組查詢

//獲取每個地區的最高分的人的詳細資訊
//獲取各科目的最高分的詳細資訊

分析:第一反應:和第一題幾乎一致,分組後的聚合函式條件不同而已,但是屬於雙欄位條件,通過最高分不能確認條目,通過地區(科目)也不能確認條目,所以無法使用in,要關聯查詢


SELECT * FROM test1 INNER JOIN (SELECT str,MAX(age) oage FROM test1 GROUP BY str) o ON test1.str=o.str AND test1.age=o.oage

 

 

多表操作

將第一個表欄位含義拆分出一個成績表

userid對應test1.id,grade為成績,subject為科目

 

//獲取每個地區的最高分的人的詳細資訊
//獲取各科目的最高分的詳細資訊

分析:看到多表就慌,實際和單表一致,拿到各科目的最高分就能拿到使用者詳細資訊,單表查詢加子查詢,或者關聯查詢就可以了,拿到上面單表的程式碼改裝

SELECT * FROM cource INNER JOIN (SELECT SUBJECT,MAX(grade) ograde FROM cource GROUP BY SUBJECT) o ON cource.SUBJECT=o.SUBJECT AND cource.grade=o.ograde

 

 

此時關聯獲取使用者詳細資訊就明朗了

SELECT * FROM test1 ,
(
SELECT id,userid,grade,o.subject FROM cource INNER JOIN (SELECT SUBJECT,MAX(grade) ograde FROM cource GROUP BY SUBJECT) o 
ON cource.SUBJECT=o.SUBJECT AND cource.grade=o.ograde)
v WHERE test1.id=v.userid

 

相關文章