在 oracle 中的一个数据透视中使用多个聚合

问题描述 投票:0回答:1

我有一个案例,我试图将数据集拆分为

before
after
,并计算每个数据集的错误率。我想要我们的最终表格结果:

定义 之前 之后
.27 .11
巴兹 .41 .32

而且,我需要一点帮助。也许甚至有一个函数可以做到这一点。 对于初学者来说,它不喜欢我的组合

sum()/count()
,它告诉我这是无效的 sql。因此,删除计数并仅使用
sum
然后我就得到了我想要的布局,有点(这些列被命名为有趣),但值都是
null
。所以,我不确定我错过了什么,希望得到一些意见

与我想要的类似的Sql:

select * from (
    select when, DEFINITION, state from (
        select 'before 'as when,
           definition,
           state
        from (
         select DEFINITION, state from REQUEST_HISTORY where processend < :SOME_DATE
        )
        union all
        select 'after ' as when,
           definition,
           state
        from (
            select DEFINITION, state from REQUEST_HISTORY where processend >= :SOME_DATE
        )
    )
)pivot ((sum(case when STATE IN (10, 15, 19) then 1 else 0 end) / count(*)) for when in ('before', 'after'))

执行但产生错误结果的sql:

select * from (
    select when, DEFINITION, state from (
        select 'before 'as when,
           definition,
           state
        from (
         select DEFINITION, state from REQUEST_HISTORY where processend < :SOME_DATE
        )
        union all
        select 'after ' as when,
           definition,
           state
        from (
            select DEFINITION, state from REQUEST_HISTORY where processend >= :SOME_DATE
        )
    )
)pivot (sum(case when STATE IN (10, 15, 19) then 1 else 0 end)  for when in ('before', 'after'))

产生:

定义 “之前”_ERROR_RATE '之后'_ERROR_RATE
JobDefinition://apps/ess/hcm/common/dataLoader/HRC_DL_TRANSFER_OBJECT
JobDefinition://apps/ess/hcm/applicationsSecurity/AseImportUsersAndRolesJob
JobDefinition://apps/ess/financials/generalLedger/programs/common/CrossValidationRuleViolationReport
JobSet://apps/ess/custom/NOVHCMDailyProcesses
JobDefinition://apps/ess/custom/共享文件夹/自定义/Integrations/LogFire/EXTRACTWMSRMADEVREPORT
JobDefinition://apps/ess/scm/costing/costAccounting/runControl/RefreshMaterializedViews
作业集://apps/ess/custom/CSTIMPORTREVENUELINES5/CST_EMEA_IMPORT_REVENUE_LINE_5
JobDefinition://apps/ess/custom/AUDIT/POSTING_QUEUE
JobDefinition://apps/ess/custom/HIERARCHY/HIERARCHY_37
JobDefinition://apps/ess/custom/REFERENCE/REFERENCE_8
sql oracle
1个回答
0
投票

您似乎想要使用条件聚合:

SELECT definition,
       AVG(
         CASE WHEN processend < :SOME_DATE
         THEN CASE WHEN STATE IN (10, 15, 19) THEN 1 ELSE 0 END
         END
       ) AS before,
       AVG(
         CASE WHEN processend >= :SOME_DATE
         THEN CASE WHEN STATE IN (10, 15, 19) THEN 1 ELSE 0 END
         END
       ) AS after
FROM   REQUEST_HISTORY
GROUP BY
       definition
© www.soinside.com 2019 - 2024. All rights reserved.