Oracle 中枢轴的中位数

Posted

技术标签:

【中文标题】Oracle 中枢轴的中位数【英文标题】:Median in Pivot in Oracle 【发布时间】:2019-11-12 21:01:33 【问题描述】:

我正在尝试在枢轴块中找到中位数,但由于枢轴需要聚合函数,因此我不断收到以下错误。我认为中位数是一个聚合函数。

下面是我正在使用的代码:-

select * from (
SELECT DISTINCT ACCOUNT.ACCOUNT_KEY,
   SUM(ACCT_CURR_AMOUNT) OVER (PARTITION BY trunc(execution_local_date_time,'mm'), ACCOUNT.ACCOUNT_KEY,GROUP_TRANSACTION_TYPE_CD ORDER BY trunc(execution_local_date_time,'mm')) AS SUM_OVER_MONTH,
   COUNT(account.ACCOUNT_KEY ) OVER (PARTITION BY trunc(execution_local_date_time,'mm'), ACCOUNT.ACCOUNT_KEY,GROUP_TRANSACTION_TYPE_CD ORDER BY trunc(execution_local_date_time,'mm')) AS COUNT_OVER_MONTH,
   GROUP_TRANSACTION_TYPE_CD                   
FROM CDS_SCHEMA.V_ACCOUNT ACCOUNT 
LEFT JOIN V_TRANSACTIONS TRA ON TRA.ACCOUNT_KEY = ACCOUNT.ACCOUNT_KEY and EXECUTION_LOCAL_DATE_TIME BETWEEN '01-JAN-2019' and '30-JUN-2019'
JOIN CDS_SCHEMA.SAM_TRANS_CODE_TYPE_REL TRANS_CODE ON TRA.TRANSACTION_CODE_CD = TRANS_CODE.TRANSACTION_CODE_CD
JOIN CDS_SCHEMA.SAM_TRANS_TYPE_GROUP_REL TRANS_CODE_GRP ON TRANS_CODE_GRP.TRANSACTION_TYPE_CD = TRANS_CODE.TRANSACTION_TYPE_CD AND  TRANS_CODE_GRP.GROUP_TRANSACTION_TYPE_CD IN('EFT-INN','EFT-OUT','IFT-INN','IFT-OUT','CCE-INN','CCE-OUT','ALL-INN','ALL-OUT')
where ACCOUNT.ACCOUNT_KEY = '0004447887C1CB00293D55CD3ED1D7B6CB3FE71C'
)a 
PIVOT 
(
    median(SUM_OVER_MONTH) *as* med_val, median(COUNT_OVER_MONTH) as med_vol
    FOR GROUP_TRANSACTION_TYPE_CD
    IN('EFT-INN','EFT-OUT','IFT-INN','IFT-OUT','CCE-INN','CCE-OUT','ALL-INN','ALL-OUT')
)

在枢轴块中,我不断收到“as”错误。请帮我找到枢轴中的中位数

【问题讨论】:

MEDIAN 可用作聚合函数。 PIVOT 部分似乎没有任何问题。请删除 PIVOT 一词及其后的所有内容,然后尝试执行查询。 @StewAshton 我必须使用数据透视,因为我必须将每个 GROUP_TRANSACTION_TYPE_CD 的中位数作为列名。有没有替代方案 请按照我的要求做,如果有错误信息,请发布。这仅用于调试目的。 请edit 您的问题包括minimal reproducible example 包括您的表的 DDL 语句、一些示例数据的 DML 表和您的预期输出,以便我们可以执行您的查询并知道它应该做什么.没有它,你给了我们一段代码,我们只能目测,但不能运行,这让帮助你变得更加困难;所以请花时间写一个体面的问题,并帮助我们帮助你。 中值在枢轴上工作正常。看这个演示:dbfiddle.uk/… 【参考方案1】:

在枢轴块中,我不断收到“as”错误。请帮我找 枢轴中位数

在您的 pivot 子句中将 *as* 更改为 as,即代替

median(SUM_OVER_MONTH) *as* med_val, median(COUNT_OVER_MONTH) as med_vol

median(SUM_OVER_MONTH) as med_val, median(COUNT_OVER_MONTH) as med_vol

【讨论】:

以上是关于Oracle 中枢轴的中位数的主要内容,如果未能解决你的问题,请参考以下文章

SQL中枢轴的变化

佳期投资专场——第321场LeetCode周赛题解

oracle 查询最大的五位数

Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

如何计算oracle pl/sql中数字的位数?

Oracle截取固定位数的小数方法总结