我需要2个不同的SUM
,但不会按同一组进行分组。
这个问题有点奇怪,让我们举个例子。我有一个查询(比如经典选择),它输出这组数据:
+----+------+------+----+----------+
| id | t_id | o_id | lt | quantity |
+----+------+------+----+----------+
| 1 | 1 | 1 | 30 | 50 |
| 2 | 2 | 10 | 90 | 90 |
| 3 | 4 | 10 | 10 | 20 |
| 4 | 4 | 10 | 5 | 20 |
| 5 | 4 | 9 | 20 | 20 |
+----+------+------+----+----------+
现在,为了简要说明,t_id
为fuel id
,o_id
为order id
,lt
为已发货量,{quantity
1}}是给定燃料的有序数量(以升为单位)。
所以,如果我解释第1行:order #1
适用于50升fuel #1
,现在只有30升。
第2,3和4行:order #10
需要90升fuel #2
和20升fuel #4
。已经运送了90升fuel #2
,并运送了10 + 5升燃料#4
。换句话说:order #10
需要90 + 20升燃料(任何燃料),90 + 10 + 5升已经发货。
现在,棘手的部分是我希望SELECT SUM(lt), SUM(quantity)
,lt
按o_id
分组,quantity
按t_id, o_id
分组。预期的输出是:
+----+------+------+---------+---------------+
| id | t_id | o_id | SUM(lt) | SUM(quantity) |
+----+------+------+---------+---------------+
| 1 | 1 | 1 | 30 | 50 |
| 2 | 2 | 10 | 105 | 110 | <-- 90+10+5 | 90+20
| 5 | 4 | 9 | 20 | 20 |
+----+------+------+---------+---------------+
关于如何实现这一点的任何想法?我希望我的问题得到很好的解释。
感谢您的帮助。
PS:事实上,整个问题可归纳为:是否有可能按不同的值分组2个聚合?PS2:这是一个SqlFiddle给出几乎相同的集合(与第一个相同)
- 编辑 -
对我感到羞耻......我没有以正确的方式解决问题,我也不清楚。但感谢@mendosi和他的建议(这让我意识到我的错误)。实际上,我只需SUM
订购一定数量的燃料,无论哪种燃料,SUM
运输燃料的数量,无论哪种燃料都是如此。
所以这是最后一个sqlfiddle,最后一个请求是我正在使用的最终请求。
答案 0 :(得分:1)
如果您使用的是原始源行,则此答案可能会有所不同,但如果我们假设您要将粘贴的表作为源,那么以下查询应该可以获得正确的结果:< / p>
Select a.o_id,
a.lt,
b.quantity
From (Select o_id, Sum(lt) As lt From Input As i Group By o_id) As a
Join (
Select o_id, Sum(quantity) As quantity
From (
Select o_id, t_id, Min(quantity) As quantity
From Input Group By o_id, t_id
) As c
Group By o_id
) As b
On a.o_id = b.o_id;
在提供的输入数据中,看起来quantity
字段对于具有相同t_id
和o_id
的所有行重复,因此我使用子查询将所有这些行折叠为一个只获得Min()
(子查询quantity
)的单个(c
)值。然后,我在外部子查询(o_id
)中按b
聚合。 lt
的值在第三个子查询o_id
中的a
之间求和。