同时使用多个查询的MySql

同时使用多个查询的MySql,mysql,Mysql,我是sql的新手,正在努力理解Limit的工作原理。我在MySql中编写了这段代码,使用的代码如下所示 但它抛出了以下错误 第2行出现错误1327 42000:未声明的变量:c 任何人都可以建议如何将一个查询中的值用于另一个查询以及此错误的原因。要生成所需的结果,您需要将这两个查询合并为一个查询。您可以通过使用子查询来实现这一点 例如,如果希望表的前半部分按ID排序,可以使用两个子查询: select from ( -- this is a "table expression"

我是sql的新手,正在努力理解Limit的工作原理。我在MySql中编写了这段代码,使用的代码如下所示

但它抛出了以下错误

第2行出现错误1327 42000:未声明的变量:c


任何人都可以建议如何将一个查询中的值用于另一个查询以及此错误的原因。

要生成所需的结果,您需要将这两个查询合并为一个查询。您可以通过使用子查询来实现这一点

例如,如果希望表的前半部分按ID排序,可以使用两个子查询:

select
from ( -- this is a "table expression" subquery
  select *,
    row_number() over(order by id) as rn
  from station
) x
where rn <= ( -- this is a typical "old school" subquery
  select count(*) / 2 from station
);
我建议百分比排名:


有两个问题:

select count(*) from station as c;

select * from station
order by ID
limit c;
问题1:这是两个独立的查询。列别名仅持续到在中定义它们的查询结束。因此,您不能在第二个查询中引用c

问题2:LIMIT需要整数文本或查询参数。不能使用别名或变量作为LIMIT的参数


因此,如果不使用动态SQL,就无法完成所显示的任务。我在中显示了这一点。

这是两个独立的查询。您想做什么?限制不会真正起作用,因为您无论如何都希望获得所有行。。。是吗?我知道这段代码不会有什么不同,但学习如何将从一个查询中找到的值用于另一个查询是我的主要目标。注意,这需要MySQL 8.0。
select *
from (
    select s.*, percent_rank() over(order by id) pr
    from station s
) s
where pr <= 0.2
select count(*) from station as c;

select * from station
order by ID
limit c;