Mysql 从地图和计数中获得最佳效果

Mysql 从地图和计数中获得最佳效果,mysql,sql,Mysql,Sql,我给你看一个我需要的例子 包含以下列和数据的表,例如: id | mapname | username | score ----|-----------|-----------|-------- 1 | mid_town | carolina | 5 2 | mid_town | rupert | 10 3 | id_room | carolina | 7 4 | mid_town | mordor | 14 5 | id_room |

我给你看一个我需要的例子

包含以下列和数据的表,例如:

id  | mapname   | username  | score
----|-----------|-----------|--------
1   | mid_town  | carolina  | 5
2   | mid_town  | rupert    | 10
3   | id_room   | carolina  | 7
4   | mid_town  | mordor    | 14
5   | id_room   | intel     | 12
6   | id_room   | puyol     | 21
7   | pindle    | puyol     | 17
8   | pindle    | messi     | 28
9   | mid_town  | puyol     | 24
n   | unknown   | unknown   | unknown
我需要最好的从地图名称顺序分数描述,但我不知道所有的地图名称

那么在这种情况下,

mid_镇最好的是普约尔,24岁

id_房间最好的是普约尔,21岁

平德尔最好的球员是梅西,28岁

输出:

puyol 2
messi 1
如何在一个查询中转换它?

尝试以下方法:

select username, score from `table` where (mapname,score) in (select mapname, max(score) from `table` group by mapname)
试试这个,伙计:

SELECT
    username, score
FROM
    <your_table>
WHERE
    mapname = 'midtown'
HAVING
    score = MAX(SCORE)

UNION

SELECT
    username, score
FROM
    <your_table>
WHERE
    mapname = 'id_room'
HAVING
    score = MAX(SCORE)

UNION

SELECT
    username, score
FROM
    <your_table>
WHERE
    mapname = 'pindle'
HAVING
    score = MAX(SCORE);  
或者这个:

SELECT
    username, score
FROM
    <your_table>
GROUP BY
    mapname
ORDER BY
    score DESC;
一位朋友回答说:

SELECT 
     t1.username, COUNT(t3.var2) as var1
FROM 
     data AS t1
JOIN
    (SELECT 
        t2.mapname, MAX(t2.score) as var2
        FROM data AS t2
        GROUP BY mapname) AS t3
ON t1.mapname = t3.mapname
AND t1.score = t3.var2
GROUP BY t1.username
ORDER BY var1 DESC;

我从五分钟前开始执行查询,我还在等待,有什么问题吗?[…]但我不知道所有的地图名称。试试另一个,伙计。