mysql - 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%?
解决方案
如果您正在运行 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
推荐阅读
- asp.net-core - 如何在 Asp.Net Core MVC 中显示 cs-html 中的值
- python - Python 如何在不干扰主代码循环的情况下使用 Tkinter GUI
- vim - Vim 颜色方案不适用于大文件
- mapbox - Mapbox Share Style - Make Public 按钮不起作用?
- python - 从另一个模块修改一个模块的属性是不好的做法吗?
- git - 如何将更改提交到 Gerrit 中的主分支?
- c# - 使用 Nuget ComponentModel.Annotations 替换程序集引用 ComponentModel.DataAnnotations 的运行时错误
- r - 使用 geom_boxplot() 在整洁的数据框中更改箱线图的顺序
- python - 为每个超过最大值的 X 堆叠“点”
- http - adding 1 user with htpasswd in 2 different servers using ssh connection