首页 > 解决方案 > SQL:使用 NTILE 函数返回前 1% 的值

问题描述

我有一个包含两列的数据库,如下所示,IDCOUNT_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% 点的值,但这不起作用。任何建议将不胜感激。

标签: sqlsnowflake-cloud-data-platform

解决方案


对您的语法进行了一些更改。这有效:

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;

推荐阅读