0

我正在尝试获取标志字段等于 1 的条目的上半部分。我尝试使用变量来保存限制值,如

set @v1:=(select ceil(count(*)/2) as top_half from my_table
where flagged=1);

select * from my_table where flagged=1 order by 21_day_probability limit @v1;

但这不起作用。有什么建议么?

谢谢

4

1 回答 1

1

SELECT语法中所述:

LIMIT子句可用于限制SELECT语句返回的行数。LIMIT接受一个或两个数字参数,它们都必须是非负整数常量,但以下情况除外:

  • 在准备好的语句中,LIMIT可以使用?占位符标记指定参数。

  • 在存储的程序中,LIMIT可以使用整数值的例程参数或局部变量来指定参数。

因此LIMIT参数永远不能是用户定义的变量。如上所述,您的选择是使用以下任一选项:

  1. 准备好的陈述

    PREPARE stmt FROM '
      select * from my_table where flagged=1 order by 21_day_probability limit ?
    ';
    EXECUTE stmt USING @v1;
    DEALLOCATE PREPARE stmt;
    
  2. 存储程序中的参数/局部变量:

    CREATE PROCEDURE foo(_l INT)
      select * from my_table where flagged=1 order by 21_day_probability limit _l
    ;
    CALL foo(@v1);
    
于 2013-06-12T20:42:33.547 回答