MySql 查询从表中找出前 50% 的记录
Posted
技术标签:
【中文标题】MySql 查询从表中找出前 50% 的记录【英文标题】:MySql Query to find out first 50% of records from a Table 【发布时间】:2020-05-09 12:49:04 【问题描述】:我正在尝试从 mysql 表用户获取前 50% 的记录。我知道我们可以使用 limit 或 top 来查找它们,但记录的总数不是固定的,因此硬编码 limit 或 top 中的实际数字不会给我前 50% 的记录。我怎样才能做到这一点?
【问题讨论】:
您可以随时搜索 - 例如dba.stackexchange.com/questions/20260/select-top-in-mysql 你的MySql是什么版本的? 【参考方案1】:如果您运行的是 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
【讨论】:
【参考方案2】:Mysql 直接不支持这个。您可以尝试使用两个查询或使用子查询
类似的东西。
-
查找总记录数/2
该值必须在限制子句中应用。
SET @count = (SELECT COUNT(*)/2 FROM table);
SET @sql = CONCAT('SELECT * FROM table LIMIT', @count);
【讨论】:
以上是关于MySql 查询从表中找出前 50% 的记录的主要内容,如果未能解决你的问题,请参考以下文章