返回 SQL 中的各种百分位数
Returning a variety of percentiles in SQL
我有一段代码 return 是一组数据的第 90 个百分位数,我正在尝试将代码更改为 return 其他百分位数(第 25、50、75)。这是 return 第 90 个百分位数(没有插值)成功的代码:
SELECT Max ([Subquery]![RECP]) AS RECP90P
FROM (SELECT TOP 90 PERCENT [RECP] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery;
我的想法是,如果我将代码更改为以下内容,例如,我将能够 return 第 25 个百分位数。这是我尝试过的:
SELECT Min ([Subquery]![RECP]) AS RECP25P
FROM (SELECT TOP 75 PERCENT [RECP] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery;
我知道 SQL 中没有 SELECT BOTTOM
,所以我试图通过使用 MIN
来 return 相反。但是,当我尝试 运行 此代码时,我 return 一个空白值。我尝试将 DESC
更改为 ASC
,认为也许 MIN
是 returning first 值而不是 所有值中的最小值,但即使这样 return 也是一个空白值。谁能解释我哪里出错了?
这样的东西可以代替吗?
SELECT Max([CompData Query]![AgedSalary]) CASE ([CompData Query]![Code]) WHEN "RECP" AS RECP90P
FROM (SELECT TOP 90 PERCENT [AgedSalary] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery;
你能解释为什么这个 CASE WHEN
是错误的 and/or 缺少一个“运算符”吗:
SELECT CASE ([CompData Query]![Code]) WHEN "RECP" THEN SELECT Max([CompData Query]![AgedSalary]) AS RECP90P FROM (SELECT TOP 90 PERCENT [AgedSalary] FROM [CompData Query] ORDER BY [AgedSalary] DESC) ELSE 'Unknown' END;
谢谢。
我认为 Access 有一个 TRIM() 函数,但 LTRIM、RTRIM 和 TRIM 中的任何一个都可以满足您的需求。
SELECT Min ([Subquery]![RECP]) AS RECP25P
FROM (
SELECT TOP 75 PERCENT [RECP]
FROM [CompData Query]
WHERE RTRIM([RECP]) <> ''
ORDER BY [RECP] DESC
) AS Subquery;
我有一段代码 return 是一组数据的第 90 个百分位数,我正在尝试将代码更改为 return 其他百分位数(第 25、50、75)。这是 return 第 90 个百分位数(没有插值)成功的代码:
SELECT Max ([Subquery]![RECP]) AS RECP90P
FROM (SELECT TOP 90 PERCENT [RECP] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery;
我的想法是,如果我将代码更改为以下内容,例如,我将能够 return 第 25 个百分位数。这是我尝试过的:
SELECT Min ([Subquery]![RECP]) AS RECP25P
FROM (SELECT TOP 75 PERCENT [RECP] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery;
我知道 SQL 中没有 SELECT BOTTOM
,所以我试图通过使用 MIN
来 return 相反。但是,当我尝试 运行 此代码时,我 return 一个空白值。我尝试将 DESC
更改为 ASC
,认为也许 MIN
是 returning first 值而不是 所有值中的最小值,但即使这样 return 也是一个空白值。谁能解释我哪里出错了?
这样的东西可以代替吗?
SELECT Max([CompData Query]![AgedSalary]) CASE ([CompData Query]![Code]) WHEN "RECP" AS RECP90P
FROM (SELECT TOP 90 PERCENT [AgedSalary] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery;
你能解释为什么这个 CASE WHEN
是错误的 and/or 缺少一个“运算符”吗:
SELECT CASE ([CompData Query]![Code]) WHEN "RECP" THEN SELECT Max([CompData Query]![AgedSalary]) AS RECP90P FROM (SELECT TOP 90 PERCENT [AgedSalary] FROM [CompData Query] ORDER BY [AgedSalary] DESC) ELSE 'Unknown' END;
谢谢。
我认为 Access 有一个 TRIM() 函数,但 LTRIM、RTRIM 和 TRIM 中的任何一个都可以满足您的需求。
SELECT Min ([Subquery]![RECP]) AS RECP25P
FROM (
SELECT TOP 75 PERCENT [RECP]
FROM [CompData Query]
WHERE RTRIM([RECP]) <> ''
ORDER BY [RECP] DESC
) AS Subquery;