首页 > 解决方案 > LIMIT值来源于Mysql中的子查询时如何只查看表的一部分

问题描述

对于表“问题”

-问题

Call_ref 是唯一标识每个调用的唯一键。每个呼叫都由用户发起,用户通过 caller_id 标识。每个用户可以拨打多个电话,但每个电话只有一个 caller_id。我想显示前 20% 的活跃用户拨打的电话。我试过这个查询 -

SELECT Caller_id, COUNT(Call_ref) FROM Issue
GROUP BY Caller_id 
ORDER BY COUNT(Call_ref) 
LIMIT round(COUNT(distinct Caller_id)/5)

但是,似乎 LIMIT 只接受一个数字。有没有办法可以将此视图限制为结果表中所有记录的前 20%?

标签: mysqlsqlsql-limit

解决方案


如果您正在运行 MySLQ 8.0,您可以使用窗口函数来执行此操作。根据您当前的查询,这将是:

select *
from (
    select caller_id, count(*) , percent_rank() over(order by count(*) desc) prn
    from issue
    group by caller_id 
) t
where prn < 0.2

推荐阅读