gpt4 book ai didi

mysql - 无法在无序表中使用限制和偏移量获取中间行

转载 作者:行者123 更新时间:2023-11-29 06:27:07 24 4
gpt4 key购买 nike

我想获取排序表的中间行。我正在使用查询:

select lat_n, count(*) c from station order by lat_n limit 1, c/2

我收到错误:

ERROR 1327 (42000) at line 9: Undeclared variable: c

现在,我知道存在一种对行进行排名或编号的方法,然后在此基础上我可以获得中间行,但我想知道为什么我的方法失败了?

该表取自here .

最佳答案

您的查询中有五个错误。来 self 自己的评论:

  1. 如果您还选择了没有 GROUP BY 子句的 count(*),则无法选择 lat_n - 这没有意义,并且会引发错误使用默认设置的当前 MySQL 版本。
  2. 如果您选择 count(*) 而不使用 GROUP BY,您将只获得一行。所以 LIMIT 没有任何意义。
  3. LIMIT 1, c/2 相当于 LIMIT c/2 OFFSET 1。您可能想要相反的方式。
  4. 您不能使用列别名作为限制或偏移。
  5. 您不能使用表达式(计算)作为 LIMIT 或 OFFSET。仅允许常量或(局部)变量。

如果您想使用 LIMIT 解决此问题,您需要编写一个存储过程或函数,在其中预先计算中间位置并将其保存到局部变量中:

delimiter //

create procedure my_proc ()
begin
declare c int;

set c = (select floor(count(*)/2) from station);

select lat_n
from station
order by lat_n
limit c, 1;

end //

delimiter ;

然后执行它

call my_proc();

或者将位置保存到用户/ session 变量中,并在准备好的语句中重用它:

set @c = (select floor(count(*)/2) from station);

set @sql = '
select lat_n
from station
order by lat_n
limit 1
offset ?
';

prepare stmt from @sql;
execute stmt using @c;

请参阅 db-fiddle 上的演示

关于mysql - 无法在无序表中使用限制和偏移量获取中间行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863182/

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