MySql查询查找表中前50%的记录

cu6pst1q  于 2023-01-29  发布在  Mysql
关注(0)|答案(3)|浏览(488)

我正在尝试从MySQL表用户获取前50%的记录。我知道我们可以使用limit或top来查找它们,但是记录的总数并不固定,所以硬编码limit或top中的实际数量不会给我前50%的记录。我该如何实现呢?

6qqygrtg

6qqygrtg1#

如果您运行的是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
dy2hfwbg

dy2hfwbg2#

mysql直接不支持此操作。您可以尝试使用两个查询或使用子查询
就像这样。
1.查找记录总数/2
1.该值必须适用于限制条款。
设置@计数=(从表中选择计数(*)/2);
SET@sql = CONCAT('SELECT * FROM表格限制',@计数);

r1zhe5dt

r1zhe5dt3#

SELECT * FROM table name LIMIT (select COUNT(*)/2 from table name);

相关问题