我有一个案例,我试图将数据集拆分为
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 | 空 | 空 |
您似乎想要使用条件聚合:
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