首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法对包含聚合或子查询的表达式执行聚合函数。sum sql最大值

无法对包含聚合或子查询的表达式执行聚合函数。sum sql最大值
EN

Stack Overflow用户
提问于 2020-08-10 14:28:31
回答 2查看 1.3K关注 0票数 0

我有一个类似于这个view_1的视图

代码语言:javascript
复制
id      Office              Begin_dt    Last_dt    Days
1       Office1            2019-09-02   2019-09-08  6   
1       Office2            2019-09-09   2019-09-30  21
1       Office1            2019-10-01   2019-10-31  30  
5       Office3            2017-10-01   2017-10-16  15  
5       Office2            2017-10-17   2017-10-30  13
5       Office2            2017-11-01   2017-11-31  30  

我想找到员工最多停留一段时间的办公室。

预期产出

代码语言:javascript
复制
id      Office             Days
1       Office1            36   
5       Office2            43

所以,我在办公室里花了6天和30天,总共36天。他在办公室里花的时间最多。

id 5的任期分别为13天和30天,43天。最多的时间花在办公室2

到目前为止

代码语言:javascript
复制
select id, max(sum(Days)), Office from view_1
group by id

错误:不能对包含聚合或子查询的表达式执行聚合函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-10 14:29:53

您可以在子查询中使用窗口函数和聚合:

代码语言:javascript
复制
select v.*
from (select v.id, v.office, sum(days) as days,
             row_number() over (partition by id order by sum(days) desc) as seqnum
      from view_1 v
      group by id, office
     ) v
where seqnum = 1;

请注意,如果id的时间最多,则会选择任意的最大行(这可能会在运行期间发生变化)。

票数 2
EN

Stack Overflow用户

发布于 2020-08-10 14:30:59

错误告诉了你问题。您需要使用子查询或CTE。

子查询:

代码语言:javascript
复制
SELECT id,
       MAX(DaysSums) AS MaxDaysSum,
       office
FROM (SELECT id,
             SUM(Days) AS DaysSum,
             office
      FROM view_1
      GROUP BY id,
               office) V
GROUP BY id,
         office;

CTE:

代码语言:javascript
复制
WITH Sums AS
    (SELECT id,
            SUM(Days) AS DaysSum,
            office
     FROM view_1
     GROUP BY id,
              office)
SELECT id,
       MAX(DaysSum) AS DaysSumMax,
       office
FROM Sums
GROUP BY id, office;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63342200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档