mrsql查询第二高的成绩_mysql-查找用户的最高分数和相关的详细信息
我有一個表,用戶可以在其中存儲分數和有關該分數的其他信息(例如,分數注釋或花費的時間等).我想要一個mysql查詢,該查詢可找到每個用戶的個人最佳成績及其相關的注釋和時間等
我嘗試使用的是這樣的:
SELECT *,MAX(score)FROM table GROUP BY(用戶)
這樣做的問題是,雖然您可以從查詢[MAX(score)]中獲得最大的個人收益,但返回的音符和時間等與最高分數無關,而是與最高分數不同(特別是*中包含的分數) .有什么辦法可以編寫查詢來選擇我想要的內容?還是我必須在PhP中手動進行?
解決方法:
您可以與子查詢聯接,如以下示例所示:
SELECT t.*,
sub_t.max_score
FROM table t
JOIN (SELECT MAX(score) as max_score,
user
FROM table
GROUP BY user) sub_t ON (sub_t.user = t.user AND
sub_t.max_score = t.score);
上面的查詢可以解釋如下.它開始于:
SELECT t.* FROM table t;
…這本身顯然會列出表的所有內容.目標是僅保留代表特定用戶最高分數的行.因此,如果我們有以下數據:
+------------------------+
| user | score | notes |
+------+-------+---------+
| 1 | 10 | note a |
| 1 | 15 | note b |
| 1 | 20 | note c |
| 2 | 8 | note d |
| 2 | 12 | note e |
| 2 | 5 | note f |
+------+-------+---------+
…我們只希望保留“ note c”和“ note e”行.
要找到我們要保留的行,我們可以簡單地使用:
SELECT MAX(score), user FROM table GROUP BY user;
請注意,我們無法從上述查詢中獲取notes屬性,因為正如您已經注意到的那樣,對于未與aggregate function聚合的字段(如MAX()或不屬于GROUP BY子句的字段),您將無法獲得預期的結果.有關此主題的更多信息,您可能需要檢查:
現在,我們只需要保留第一個查詢中與第二個查詢匹配的行.我們可以使用INNER JOIN來做到這一點:
...
JOIN (SELECT MAX(score) as max_score,
user
FROM table
GROUP BY user) sub_t ON (sub_t.user = t.user AND
sub_t.max_score = t.score);
子查詢的名稱為sub_t.它是擁有最高個人得分的所有用戶的集合. JOIN的ON子句將限制應用于相關字段.請記住,我們只想保留屬于此子查詢的行.
標簽:max,grouping,mysql
來源: https://codeday.me/bug/20191106/2000623.html
總結
以上是生活随笔為你收集整理的mrsql查询第二高的成绩_mysql-查找用户的最高分数和相关的详细信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 69 session和cookie的区别
- 下一篇: 高德地图:No implementati