Mysql 2 SUM和

时间:2016-11-25 01:30:33

标签: mysql group-by sum

我需要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_idfuel ido_idorder idlt为已发货量,{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)lto_id分组,quantityt_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,最后一个请求是我正在使用的最终请求。

1 个答案:

答案 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_ido_id的所有行重复,因此我使用子查询将所有这些行折叠为一个只获得Min()(子查询quantity)的单个(c)值。然后,我在外部子查询(o_id)中按b聚合。 lt的值在第三个子查询o_id中的a之间求和。