【发布时间】:2016-08-04 15:07:42
【问题描述】:
我有一张表TERADATA_Q4_Temp & 添加一些过滤器后,行的外观如下:
查询:
select *
from [TERADATA_Q4_Temp]
where CUST_ID = '100008666' and TRXN_TYPE = '2001' and MONTH = '11'
结果:
CUST_ID ACCT_NO TRXN_TYPE CURRENCY TYPE TRXN_DATE MONTH Total Amount txn count
100008666 9335945808 2001 MXP 2015-11-17 11 5000 1
100008666 9335945808 2001 MXP 2015-11-23 11 20000 1
100008666 9335945808 2001 MXP 2015-11-09 11 5000 1
现在,我正在尝试使用以下查询计算“txn 计数”列的中位数,我得到了正确的结果:
查询:
SELECT
AVG(1.0E * [Total Amount]) as 'MEDIAN_DAILY_AMT'
FROM
(SELECT
[Total Amount],
2 * ROW_NUMBER() OVER (ORDER BY [Total Amount]) - COUNT(*) OVER () AS y
FROM
[TERADATA_Q4_Temp]
WHERE
CUST_ID = '100008666' and TRXN_TYPE = '2001' and MONTH = '11') AS d
WHERE
y BETWEEN 0 AND 2
结果:
MEDIAN_DAILY_AMT
5000
但是,当我尝试将中位数计算为单独的列字段时,出现错误。你能检查我下面的查询,看看我哪里出错了-
查询:
SELECT
[CUST_ID], [ACCT_NO], [TRXN_TYPE], [CURRENCY TYPE], [MONTH],
(SELECT
AVG(1.0E * [Total Amount])
FROM
(SELECT
[Total Amount],
2 * ROW_NUMBER() OVER (ORDER BY [Total Amount]) - COUNT(*) OVER () AS y
FROM
[TERADATA_Q4_Temp]) AS d
WHERE
y BETWEEN 0 AND 2) as 'MEDIAN_DAILY_AMT'
FROM
[TERADATA_Q4_Temp]
WHERE
CUST_ID = '100008666' and TRXN_TYPE = '2001' and MONTH = '11'
GROUP BY
[CUST_ID], [ACCT_NO], [TRXN_TYPE], [CURRENCY TYPE], [MONTH]
结果:
CUST_ID ACCT_NO TRXN_TYPE CURRENCY TYPE MONTH MEDIAN_DAILY_AMT
100008666 9335945808 2001 MXP 11 10573.51
你可以看到我得到的中位数是 10573.51 而不是 5000。
谢谢。
【问题讨论】:
标签: sql sql-server median