我正在使用以下查询来删除所有卷中前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)
答案 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