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
3条答案
按热度按时间6qqygrtg1#
如果您运行的是MySQL 8.0,您可以使用窗口函数:
ntile()
完全符合您的要求。假设您的排序列是id
:在早期版本中,一个选项是用户变量和与聚合查询的联接:
dy2hfwbg2#
mysql直接不支持此操作。您可以尝试使用两个查询或使用子查询
就像这样。
1.查找记录总数/2
1.该值必须适用于限制条款。
设置@计数=(从表中选择计数(*)/2);
SET@sql = CONCAT('SELECT * FROM表格限制',@计数);
r1zhe5dt3#