gpt4 book ai didi

MySQL @rownum :=@rownum+1

转载 作者:行者123 更新时间:2023-11-29 05:57:26 26 4
gpt4 key购买 nike

SET @rownum := -1;

SELECT
round(AVG(t.LAT_N),4)
FROM
(
SELECT
@rownum := @rownum + 1 AS rownum,
STATION.LAT_N AS LAT_N
FROM
STATION
ORDER BY STATION.LAT_N
) AS t
WHERE
t.rownum IN (
CEIL(@rownum/2),
FLOOR(@rownum/2)
)
;

在上面的代码中,

  1. @rownum:=@rownum+1 是如何工作的?

这就像用 Python 写一些东西:i = i+1

在对 i 的值进行 for 循环的上下文中哪个有意义,但是上述 SQL 代码中的 for 循环在哪里(select 是否执行 for 循环?)

  1. 此外,在 WHERE 子句中,@rownum 被用作表示表中最大行数的变量,而在 SELECT 中,它被用作表示当前行的单个行号的变量正在迭代。为什么?

  2. 据我了解,@rownum 声明了一个持续存在于 WHERE 子句中的实例变量。那么做“AS rownum”有什么意义呢?

最佳答案

此查询使用行号 session 变量来计算表中 LAT_N 值的中位数。考虑一个简单的场景,其中 LAT_N 值的范围从 1 到 10。然后,在分配行号(从零开始)之后,我们将有以下中间表:

LAT_N | rownum
1 | 0
2 | 1
3 | 2
4 | 3
5 | 4
6 | 5
7 | 6
8 | 7
9 | 8
10 | 9

在迭代内部子查询结束时,从 -1 开始的 @rownum 的值为 9。外部查询如下所示:

SELECT ROUND(AVG(t.LAT_N), 4)
FROM
(the above table) t
WHERE
t.rownum IN (CEIL(@rownum/2), FLOOR(@rownum/2));

所以这是取 LAT_N 的平均值,其中生成的行号是 45。这将产生 5.5 的中值。请注意,对于奇数的记录,上限和下限都将产生相同的数字,并且只有一个真正的中值。

Demo

关于MySQL @rownum :=@rownum+1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48162099/

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