【问题标题】:SQL AVG and overall average of departmentsSQL AVG 和部门的总体平均值
【发布时间】:2019-02-21 15:35:24
【问题描述】:

我的数据是这样的

Dept  Sub_Dept  Sal
d1     sd1       100
d1     sd1       150
d1     sd2       100
d1     sd2       200
d1     sd2       350
d2     sd1       100
d2     sd1       250
d2     sd1       250
d2     sd2       200
d2     sd2       350

我的输出应该是每个子部门的计数,每个子部门(sub_dept)的Sal值的AVG,以及所有部门(部门)的AVG

我希望我的输出看起来像这样

结果

d1         sd1 2  125
d1         sd2 3  200
Total          5  180
d2         sd1 3  200
d2         sd2 2  225
Total          5  230
grand total    10 205

如何获取内部和外部AVG 值?

【问题讨论】:

  • 你了解GROUP BY了吗?

标签: sql average


【解决方案1】:

全部使用联合

select dept,sub_dept,count(*) cnt ,avg(Sal) as av
from table_name group by dept,sub
 union all
 select 'total','', count(*),avg(Sal) 
 from table_name

【讨论】:

  • 如果我们想获得每个部门的总计数平均值,如下所述,如何按 d1 sd1 100 d1 sd1 150 d1 sd2 100 d1 sd2 200 d1 sd2 350 d2 sd1 100 d2 sd1 250 d2 sd1 250 分组d2 sd2 200 d2 sd2 350 结果 d1 sd1 2 125 d1 sd2 3 200 总计 5 180 d2 sd1 3 200 d2 sd2 2 225 总计 5 230 总计 10 205
  • @Velpur 请添加问题而不是评论顺便说一句,我提供的查询适用于您当前的问题
【解决方案2】:

SQL 的大多数方言都支持标准grouping sets(或至少roll up)。典型的语法是:

select dept, sub_dept, avg(sal)
from t
group by grouping sets ( (dept, sub_dept), () );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多