在多个group by子句中找到MAX的总和值

时间:2017-11-09 17:19:07

标签: mysql sql

正如标题所示,我试图在一段时间内根据B列的子集找到A列中对象的C列中的最大求和值(让我们说D列)。我当前的查询看起来像这样,我返回大于10,000的求和值。

select id_a, id_b, sum(column_c) from master_table where id_b in (1,2,3,4,5) 
and ymdh >= '2017-11-01' group by 1,2 having sum(column_c) > 10000 order by 2,3
desc;

我想要返回的是sum(column_c)中的最大值。我尝试使用max()和distinct()函数。特别是使用max(sum(imps)),但聚合函数调用很多都不是嵌套的。有人能在这里提供指导吗?

3 个答案:

答案 0 :(得分:2)

您可以使用FROM(选择)T

select max(my_sum) 
from (
    select id_a
      , id_b
      , sum(column_c)  my_sum
    from master_table 
    where id_b in (1,2,3,4,5) 
      and ymdh >= '2017-11-01' 
    group by 1,2 having my_sum > 10000 
    order by 2,3 desc;
) T 

答案 1 :(得分:0)

这样做你想要的吗?

select id_a, id_b, sum(column_c)
from master_table
where id_b in (1,2,3,4,5) and
      ymdh >= '2017-11-01'
group by id_a, id_b
having sum(column_c) > 10000 
order by sum(column_c) desc
limit 1;

也就是说,使用order bylimit来获取您想要的值。 (此查询也包含group by个键,但这不是必需的。)

答案 2 :(得分:0)

scaisEdge有答案(和我的+1) - 但我只是想在设计一个像你正在处理的SQL语句时添加一些思考过程。

不要觉得你需要撰写整篇文章 - 这是一个很重要的陈述,或者它是一个单一的查询。

相反,您经常需要将问题分解为步骤,解决各个步骤,然后将这些步骤用作查询的源 - 因为您不必在FROM子句中使用表;你可以改用你自己的子查询。

那么对于这个问题呢?你已经完成了第一步 - 你想出了如何编写在特定分组中得到Sum的查询:

select someCol, sum(otherCol) as groupSum from myTable
group by someCol

大!现在,您可以像使用桌子一样有效地使用它:

select someCol, groupSum
from
(
    select someCol, sum(otherCol) as groupSum from myTable
    group by someCol
) mySubquery

在您的情况下,您希望获得最大金额?

select max(groupSum)
from
(
    select someCol, sum(otherCol) as groupSum from myTable
    group by someCol
) mySubquery

在编写完整的SQL语句时,这不仅有助于它,它实际上可以帮助尝试读取/调试它的人,特别是如果你很好地命名子查询/列:

select max(totalHitsForWeek) as maxWeeklyUsage
from
(
    select week, sum(hits) as totalHitsForWeek
    from requestsTable
) hitsPerWeekSubquery

希望有助于添加scaisEdge的答案! : - )