首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表中查找前50%的记录的MySql查询

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

Stack Overflow用户
提问于 2020-05-09 12:49:04
回答 2查看 3.9K关注 0票数 0

我正在尝试从MySQL表用户中获取前50%的记录。我知道我们可以使用极限或顶部来查找它们,但是记录的总数并不是固定的,所以硬编码限制或顶部的实际数字不会给我前50%的记录。我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-09 13:24:17

如果您运行的是MySQL 8.0,您可以为此使用窗口函数:ntile()完全满足您的要求。假设您的订购列是id

代码语言:javascript
复制
select *
from (select t.*, ntile(2) over(order by id) nt from mytable) t
where nt = 1

在早期版本中,有一个选项是用户变量和聚合查询的联接:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-05-09 13:06:09

Mysql直接不支持这一点。您可以尝试使用两个查询或使用子查询。

就像这样。

  1. 查找总记录/2
  2. 的计数,该值必须应用于限制子句中。

SET @count =(从表中选择COUNT(*)/2 );

设置@sql =CONCAT(“选择*从表限制”,@count);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61696963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档