Mysql 使用内部联接按最小值和最大值进行计数和分组
抱歉,如果标题令人困惑,我有一个表,其中存储了一个玩家以及他们在几秒钟内完成地图所用的时间,我正在尝试编写一个查询,选择特定玩家拥有的最快/最短时间的所有地图 我尝试了以下查询:Mysql 使用内部联接按最小值和最大值进行计数和分组,mysql,join,group-by,inner-join,Mysql,Join,Group By,Inner Join,抱歉,如果标题令人困惑,我有一个表,其中存储了一个玩家以及他们在几秒钟内完成地图所用的时间,我正在尝试编写一个查询,选择特定玩家拥有的最快/最短时间的所有地图 我尝试了以下查询: SELECT * FROM ck_playertimes a JOIN ( SELECT MIN(runtimepro) runtimepro FROM ck_playertimes WHERE style = 0 group
SELECT *
FROM ck_playertimes a
JOIN
( SELECT MIN(runtimepro) runtimepro
FROM ck_playertimes
WHERE style = 0
group
by mapname
) b
ON a.runtimepro = b.runtimepro
WHERE steamid = 'STEAM_1:0:20019070'
AND style = '0'
但是,它选择的某些时间不是特定地图的最短/最快时间,并且当表中不存在该重复时,甚至会以某种方式出现重复
有什么帮助吗?=) 您加入的子查询应该找到每个播放器的最短运行时间。因此,以下措施应该有效:
SELECT c1.*
FROM ck_playertimes c1
INNER JOIN
(
SELECT mapname, MIN(runtimepro) AS min_runtimepro
FROM ck_playertimes
GROUP BY mapname
) c2
ON c1.mapname = c2.mapname AND c1.runtimepro = c2.min_runtimepro
WHERE
c1.steamid = 'STEAM_1:0:20019070' AND
c1.style = '0';
如果您使用的是MySQL 8+或更高版本,那么编写上述查询的另一种更现代的方式是使用行数
:
SELECT * -- but always better to list out explicit columns
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY mapname ORDER BY runtimepro) rn
FROM ck_playertimes
) t
WHERE rn = 1;
你所要求的是每个玩家,每个地图的最小和最大时间 这是一个基本的选择和分组方式,需要bo连接 我假设您从中选择的表除了以秒为单位的时间外还包含一个player_id 并保留了你提供的条件 希望有帮助
SELECT player_id, mapname, MIN(runtimepro) As shortest,
MAX(runtimepro) As longest
FROM ck_playertimes times
WHERE
steamid = 'STEAM_1:0:20019070'
AND style = '0'
GROUP BY
player_id, mapname
表的结构是什么?大概,“runtimepro”是唯一的。嗨。这是一个常见问题。甚至还有一个标签:最伟大的每一组。强迫自己以多种方式清晰地写一个问题/问题/目标,有/没有特定的字符串/名称和谷歌。可能重复