正如标题所示,我试图在一段时间内根据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)),但聚合函数调用很多都不是嵌套的。有人能在这里提供指导吗?
答案 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 by
和limit
来获取您想要的值。 (此查询也包含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的答案! : - )