【问题标题】:Group by Aggregate Case statement and display case column and count按聚合案例语句分组并显示案例列和计数
【发布时间】:2023-03-04 05:55:01
【问题描述】:

我有一个查询需要修改以显示 Bucket 字段中的所有值并在那里显示计数和 METRIC_VALUE

select 
CASE
WHEN sum(e.Metric_Value) >1000 THEN '>1000'
WHEN sum(e.Metric_Value) >500  THEN '>500'
WHEN sum(e.Metric_Value) >100  THEN '>100'
WHEN sum(e.Metric_Value) >1 THEN '>1'
ELSE '<1' END AS "Bucket",
count(distinct i.INTEGRATORKEY) as Count,
SUM(e.Metric_Value) AS Metric_Value  
from "ANALYTICS_PROD"."ACCOUNT_SCORE"."AGG_AS_ENVELOPES" e
left join   "ANALYTICS_PROD"."BODM"."INTEGRATORLOOKUPVIEW"  i
ON e.KeyId = i.KeyId 
AND e.SourceKey = i.SourceKey

上述查询的结果只显示'>1000'的第一行 但是我需要查看一桶其他指标值,例如 >1000, >500, >100, >1

【问题讨论】:

  • 请提供样本数据、所需结果和适当的数据库标签。您有一个没有group by 的聚合查询。这很可疑。
  • 同意 Gordon 所说的 + 为什么你需要离开这里加入?
  • 正如 Gordon 所说,您没有 Group BY,因此您只会得到一个结果,我们可以假设您的单个结果的 metric_value 的总和大于 1000。您需要定义分组level 让它返回多个结果。

标签: sql group-by count case


【解决方案1】:

通过应用聚合函数(SUMCOUNT)并且没有 GROUP BY 子句,您可以将所有行聚合到一个结果行。显然表中所有Metric_Value的总数大于1000。

您似乎想要的是每个桶的计数,因此按桶分组:

select 
  case
    when e.metric_value > 1000 then '>1000'
    when e.metric_value >  500 then '>500'
    when e.metric_value >  100 then '>100'
    when e.metric_value >    1 then '>1'
    else                            '<=1'
  end as bucket,
  count(distinct i.integratorkey) as count_of_integrators,
  sum(e.metric_value) as sum_of_metric_values
from analytics_prod.account_score.agg_as_envelopes e
left join analytics_prod.bodm.integratorlookupview  i on e.keyid = i.keyid 
                                                     and e.sourcekey = i.sourcekey
group by
  case
    when e.metric_value > 1000 then '>1000'
    when e.metric_value >  500 then '>500'
    when e.metric_value >  100 then '>100'
    when e.metric_value >    1 then '>1'
    else                            '<=1'
  end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多