gpt4 book ai didi

MySQL 显示每个团队的第四个最小值

转载 作者:行者123 更新时间:2023-11-29 15:39:24 25 4
gpt4 key购买 nike

我在 MySQL 5.7 上使用 phpMyAdmin
下面的代码选择排除任何零值的最低值,并为我提供了一个很好的表格,其中包含所有 teamid 以及该事件 (zid) 旁边的最低时间(以秒为单位)。

SELECT teamid, MIN(time) AS 'fastest time'
FROM data
WHERE time > 0 AND zid = 217456
GROUP BY teamid

如何调整它以获得第四个最低值?我尝试了无数通过搜索找到的建议,但没有任何效果

表格标题:
id(AI列设为主索引)
zid(这是事件标识号)
团队ID
姓名
时间(以秒为单位)

我可以在团队栏中添加一个位置,这会让这变得很容易吗?然后我就要求 MySQL 给我所有的位置 = 到 4 ?

最佳答案

MySQL 8:使用窗口函数。

SELECT 
teamid,
time '4th_Lowest'
FROM data
WHERE time > 0 AND zid = 217456
AND (dense_rank() OVER (PARTITION BY teamid ORDER BY time ASC)) = 4;

Mysql 5.7 及更低版本:我们将使用以下变量对排序数据进行计算(teamid 和时间)

  • rank - 为每个唯一的(teamid、时间)设置排名
  • c_time - 每当两个连续行的time之间发生变化时,我们就会提高排名。 IF(@c_time = d.time, @rank, @rank:= @rank + 1)
  • c_team_id - 我们将检查连续两行是否具有相同或不同的团队,如果不同则将排名重置为 1。检查其他部分 IF(@c_team_id = d.teamid, .. .,@rank:= 1)
SELECT 
t.teamid,
t.`time`
FROM(
SELECT
d.teamid, -- Represent current row team id
d.`time`, -- Represent current row time
IF(@c_team_id = d.teamid, IF(@c_time = d.`time`, @rank, @rank:= @rank + 1), @rank:= 1) as rank, -- determine rank based on above explanation.
@c_team_id:= d.teamid, -- We are setting this variable to current row team id after using it in rank column, so rank column of next row will have this row team id for comparison using @c_team_id variable.
@c_time:= d.`time`
FROM `data` AS d,
(SELECT @c_time:= 0 as tim, @c_team_id:= 0 as tm_id, @rank:= 0 as rnk) AS t
WHERE d.`time` > 0 AND d.zid = 217456
ORDER BY d.teamid, d.`time` ASC -- Use to make sure we have same team records in sequence and with ascending order of time.
) AS t
WHERE t.rank = 4
GROUP BY t.teamid;

关于MySQL 显示每个团队的第四个最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57838493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com