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