我试图获取标志字段等于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;


但这是行不通的。有什么建议么?

谢谢

最佳答案

SELECT语法中所述:


  LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT带有一个或两个数字参数,这两个参数都必须是非负整数常量,但以下情况除外:
  
  
  在准备好的语句中,可以使用LIMIT占位符标记指定?参数。
  在存储的程序中,可以使用整数值的例程参数或局部变量来指定LIMIT参数。
  


因此,LIMIT参数永远不能为user-defined variables。如上所述,您的选择将使用以下任一方法:


准备好的陈述

PREPARE stmt FROM '
  select * from my_table where flagged=1 order by 21_day_probability limit ?
';
EXECUTE stmt USING @v1;
DEALLOCATE PREPARE stmt;

存储程序中的参数/局部变量:

CREATE PROCEDURE foo(_l INT)
  select * from my_table where flagged=1 order by 21_day_probability limit _l
;
CALL foo(@v1);

关于mysql - SQL查询-基于子查询的限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17074904/

10-11 03:33
查看更多