我正在尝试从 MySQL 表用户获取前 50% 的记录。我知道我们可以使用 limit 或 top 来查找它们,但记录总数不固定,因此对 limit 或 top 中的实际数量进行硬编码并不能给出前 50% 的记录。我怎样才能实现这个目标?
如果您运行的是 MySQL 8.0,则可以使用窗口函数:ntile()完全符合您的要求。假设您的订购栏是id
:
select *
from (select t.*, ntile(2) over(order by id) nt from mytable) t
where nt = 1
在早期版本中,一个选项是用户变量和与聚合查询的连接:
select *
from (
select t.*, @rn := @rn + 1 rn
fom (select * from mytable order by id) t
cross join (select @rn := 0) x
cross join (select count(*) cnt from mytable) c
) t
where rn <= cnt / 2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)