gpt4 book ai didi

sql - 按多列分组的聚合函数

转载 作者:行者123 更新时间:2023-12-02 00:23:47 24 4
gpt4 key购买 nike

我有一个包含以下列的表:ClientID、OrderID、ProductID、Quantity,每个 ProductID 在每个 OrderID 中仅出现一次,并且每个 OrderID 仅对应一个 ClientID。

示例数据:

ClientID  OrderID  ProductID  Quantity
1 100 25 10
1 100 30 20
1 101 27 10
1 101 30 10
1 102 27 30
2 103 27 10
2 104 15 10

我需要执行以下操作:在按 ClientID 和 ProductID 分组时,我需要对其他列应用聚合函数,以便结果集包含每个 ClientID 的最低 OrderID 以及每个 ProductID 的数量列的总和客户端ID。结果集的行数等于每个 ClientID 的不同 ProductID 的数量,并且每行的 OrderID = 每个 ClientID 的最低 OrderID,无论 ProductID 是多少。

期望的结果:

ClientID  OrderID  ProductID  Quantity
1 100 25 10
1 100 30 30
1 100 27 40
2 103 27 10
2 103 15 10

我尝试使用以下查询来实现此目的:

select ClientID, min(OrderID) as OrderID, ProductID, sum(Quantity) as Quantity 
from table
group by ClientID, ProductID

但是由于分组的原因,结果集包含每个 ClientID 的多个 OrderID:

当前结果:

ClientID  OrderID  ProductID  Quantity
1 100 25 10
1 100 30 30
1 101 27 40
2 103 27 10
2 104 15 10

请注意两个结果中第 3 行和第 4 行的 OrderID 有何不同。

最佳答案

select 
ClientID, MinOrderID, ProductID, SUM(quantity)
from
(
select ClientID, min(OrderID) over (partition by ClientID) as MinOrderID, ProductID, Quantity
from yourtable
) v
group by ClientID, MinOrderID, ProductID

或者

select distinct 
ClientID,
min(OrderID) over (partition by ClientID),
ProductID,
sum(Quantity) over (partition by ClientID, ProductID)
from yourtable

关于sql - 按多列分组的聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24657624/

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