簡體   English   中英

通過最大值對不同的記錄進行排序,而無需使用子查詢(mysql)

[英]Order by max value on distinct records, without using a subquery (mysql)

我有下表:

+-----------+--------+------+--------+----------+----------+---------+-------+
| player_id | europe | asia | africa | namerica | lamerica | oceania | total |
+-----------+--------+------+--------+----------+----------+---------+-------+
|    121693 |   1076 | 70   | NULL   | NULL     | NULL     | NULL    |  1146 |
|    121693 |    416 | 70   | NULL   | NULL     | NULL     | NULL    |   486 |
|    121693 |     40 | NULL | NULL   | NULL     | NULL     | NULL    |    40 |
|    118840 |     40 | NULL | NULL   | NULL     | NULL     | NULL    |    40 |
|    121693 |     40 | 70   | NULL   | NULL     | NULL     | NULL    |   110 |
|    118840 |     40 | 490  | NULL   | NULL     | NULL     | NULL    |   530 |
|    121691 |     96 | 0    | NULL   | NULL     | NULL     | NULL    |    96 |
|    121693 |    136 | 70   | NULL   | NULL     | NULL     | NULL    |   206 |
|    118840 |     40 | NULL | NULL   | NULL     | NULL     | NULL    |    40 |
|    121691 |     96 | NULL | NULL   | NULL     | NULL     | NULL    |    96 |
+-----------+--------+------+--------+----------+----------+---------+-------+

我想得到的是這樣的:

+-----------+--------+------+--------+----------+----------+---------+-------+
| player_id | europe | asia | africa | namerica | lamerica | oceania | total |
+-----------+--------+------+--------+----------+----------+---------+-------+
|    121693 |   1076 |   70 | NULL   | NULL     | NULL     | NULL    |  1146 |
|    118840 |     40 |  490 | NULL   | NULL     | NULL     | NULL    |   530 |
|    121691 |     96 |    0 | NULL   | NULL     | NULL     | NULL    |    96 |
+-----------+--------+------+--------+----------+----------+---------+-------+

我已經嘗試了以下方法,但是結果並不是我所需要的。

SELECT player_id, europe, asia, africa, namerica, 
                lamerica, oceania, MAX(total) AS total 
FROM tbl 
WHERE total IS NOT NULL 
GROUP BY player_id 
ORDER BY total DESC

這是結果

+-----------+--------+------+--------+----------+----------+---------+-------+
| player_id | europe | asia | africa | namerica | lamerica | oceania | total |
+-----------+--------+------+--------+----------+----------+---------+-------+
|    121693 |   1076 |   70 | NULL   | NULL     | NULL     | NULL    |  1146 |
|    118840 |     40 |      | NULL   | NULL     | NULL     | NULL    |   530 |
|    121691 |     96 |    0 | NULL   | NULL     | NULL     | NULL    |     96 |
+-----------+--------+------+--------+----------+----------+---------+-------+

請注意,我正在使用MySQL視圖。 在MySQL的觀點不允許 子查詢

編輯:

根據先前的建議,我已經嘗試過:

SELECT a.player_id, a.europe, a.asia, a.africa, a.lamerica, a.namerica,    a.oceania, a.total 
FROM tbl AS a 
INNER JOIN (
    SELECT player_id, MAX(total) AS total 
    FROM tbl 
    GROUP BY player_id) b
ON a.player_id = b.player_id AND a.total = b.total

但是我得到了以下結果:

+-----------+--------+------+--------+----------+----------+---------+-------+
| player_id | europe | asia | africa | lamerica | namerica | oceania | total |
+-----------+--------+------+--------+----------+----------+---------+-------+
|    121693 |   1076 | 70   | NULL   | NULL     | NULL     | NULL    |  1146 |
|    118840 |     40 | 490  | NULL   | NULL     | NULL     | NULL    |   530 |
|    121691 |     96 | NULL | NULL   | NULL     | NULL     | NULL    |   96  |
|    121691 |     96 | 0    | NULL   | NULL     | NULL     | NULL    |    96 |
+-----------+--------+------+--------+----------+----------+---------+-------+

它還返回平局。 如何避免這種情況?

將另一個GROUP BY a.player_id添加到查詢中:

SELECT a.player_id, a.europe, a.asia, a.africa, a.lamerica, a.namerica,    a.oceania, a.total 
FROM tbl AS a 
INNER JOIN (
    SELECT player_id, MAX(total) AS total 
    FROM tbl 
    GROUP BY player_id) b
ON a.player_id = b.player_id AND a.total = b.total
GROUP BY a.player_id

這將從具有聯系的行中任意選擇其他列的內容。

如果您啟用了ONLY_FULL_GROUP_BY SQL模式(默認情況下從MySQL 5.7開始啟用),則需要使用ANY_VALUE表示可以。

SELECT a.player_id, ANY_VALUE(a.europe), ANY_VALUE(a.asia), ANY_VALUE(a.africa), ANY_VALUE(a.lamerica), ANY_VALUE(a.namerica), ANY_VALUE(a.oceania), ANY_VALUE(a.total)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM