sql - SQL:使用 NTILE 函数返回前 1% 的值
问题描述
我有一个包含两列的数据库,如下所示,ID
我COUNT_OF_ACTIONS
想从COUNT_OF_ACTIONS
下面返回前 1% 的值可能不是最好的例子,但想象一下COUNT_OF_ACTIONS
从 0 到 100,所以查询应该返回:99 和100,因为这些计数 >= 99(前 1% 的值)
ID COUNT_OF_ACTIONS
234324 1
15435 2
345432 3
2453 4
2245243 5
54352 6
452345 7
245354 8
3345 9
245245 10
WITH SPACES as (
SELECT d.ID, COUNT(DISTINCT t.ACTION_ID) as COUNT_OF_ACTIONS
FROM DATA d
GROUP BY 1
)
SELECT count(distinct id)
FROM SPACES
NTILE(100) OVER (COUNT_OF_ACTIONS ORDER BY COUNT_OF_ACTIONS DESC) >= 99
我尝试使用 NTILE 方法来获取所有大于 99% 点的值,但这不起作用。任何建议将不胜感激。
解决方案
对您的语法进行了一些更改。这有效:
Create or replace table t1 (ID varchar(255), COUNT_OF_ACTIONS number(10));
insert into t1 values
('ID1',1),
('ID2',2),
('ID3',3),
('ID4',4),
('ID5',5),
('ID6',6),
('ID7',7),
('ID8',8),
('ID9',9),
('ID10',10);
with t2 as (
select ID, ntile(100) over (order by COUNT_OF_ACTIONS) as NTILE_100 from t1 )
select * from t2 where ntile_100 >=9;
推荐阅读
- angular - 如何以角度在组件之间传递数据
- qnamaker - 如何使用 QnA Maker API v4.0 更新现有知识库?
- jenkins - 测试和生产环境的 CI/CD 管道部署流程
- java - ValueObject 的职责是什么
- ios - 如何以编码结构发布数据?
- php - 如何在 WordPress 中获取当前访问者所在国家/地区的时区
- android - Google Play 商店内部测试无法开始推出
- android - 工具栏的后退按钮不起作用
- file-upload - 如何在 hybris 后台上传文件而不将其上传到媒体?
- c# - 为重复条目返回错误 Postgresql