gpt4 book ai didi

Mysql 2 SUM 和不同的分组依据

转载 作者:行者123 更新时间:2023-11-29 11:09:50 24 4
gpt4 key购买 nike

我需要 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燃料 IDo_id订单 IDlt 是运输的升数,quantity 是给定燃料的订购数量(以升为单位)。

因此,如果我解释第 1 行:订单 #1 用于 50 升燃料 #1,目前仅运送了 30 升。

第 2、3 和 4 行:订单 #10 需要 90 升燃料 #2 和 20 升燃料 #4。 90 升#2 燃料 已发货,10+5 升#4 燃料已发货。换句话说:订单 #10 需要 90+20 升燃油(任何燃油),并且 90+10+5 升已发货。

现在,棘手的部分是我想SELECT SUM(lt), SUM(quantity), lto_id分组但数量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 ,最后一个请求是我正在使用的最终请求。

最佳答案

如果您使用原始源行,这个答案可能会有所不同,但如果我们假设您要将粘贴的表作为源,那么以下查询应该会为您提供正确的结果:

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 的所有行重复,因此我使用子查询将所有这些行折叠为一行,并仅获取 quantity 的单个 (Min()) 值(子查询 c)。然后,我通过外部子查询 (b) 中的 o_id 聚合该数据。 lt 的值在第三个子查询 a 中对 o_id 进行求和。

关于Mysql 2 SUM 和不同的分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40796508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com