SQL删除值前1%的行

时间:2018-08-11 02:55:27

标签: sql oracle plsql

我正在使用以下查询来删除所有卷中前1%的行。我正在使用以下stackoverflow问题构建查询:Select top 10 percent, also bottom percent in SQL Server

但是,我的查询生成一个错误。我希望就必须更改的内容提供一些意见。

pyramid = @(x) min(min((1:x),(1:x).'), min((x:-1:1),(x:-1:1).'));

我收到以下错误:

CREATE TABLE TEST AS

WITH PERCENTILE AS
(
    SELECT SEGMENT,
           VOLUME,
           OUTLIER_VOL = NTILE(100) OVER (ORDER BY VOLUME)
    FROM OFFER_PERIOD_SEGMENT
)

SELECT *
FROM PERCENTILE
WHERE OUTLIER_VOL NOT IN (99,100)

2 个答案:

答案 0 :(得分:3)

尝试更改

OUTLIER_VOL = NTILE(100) OVER (ORDER BY VOLUME)

收件人:

NTILE(100) OVER (ORDER BY VOLUME) OUTLIER_VOL

我相信<column alias> = <value>语法是SQL Server特有的。

答案 1 :(得分:0)

如果将来有人偶然发现此问题,我想补充一点,我计算的百分位数不正确。下面的代码用于计算百分位数,而在上述情况下,您将创建100个大小相等的存储桶,数据将放置在其中:

CREATE TABLE TEST AS

WITH PERCENTILE AS
(
    SELECT SEGMENT,
           VOLUME,
           PERCENT_RANK() OVER (ORDER BY VOLUME) AS OUTLIER_VOL
    FROM OFFER_PERIOD_SEGMENT
)

SELECT *
FROM PERCENTILE
WHERE OUTLIER_VOL < 0.99