gpt4 book ai didi

sql - 在 GROUP BY 分组中,根据另一列的最大值选择值

转载 作者:行者123 更新时间:2023-12-05 06:24:24 26 4
gpt4 key购买 nike

我正在尝试构建一个查询,将 GROUP BY 组减少为单行,包括基于另一列的最大值的列值。在这种情况下,我需要一个商品 ID、订购的总数量和最常用的供应商。

我已经成功构建了一个查询,该查询按项目和供应商对订购的数量和组进行求和,产生:

| id | qty | supplier       |
| 1 | 20 | S&S Activewear |
| 1 | 10 | J&J Textiles |
| 2 | 5 | AB Footwear |
| 2 | 10 | CD Shoes |

预期结果将是订购的总数量(对于所有供应商)和最常用的供应商,因此:

| id | total_qty | most_used_supplier |
| 1 | 30 | S&S Activewear |
| 2 | 15 | CD Shoes |

从概念上讲,我想象做一个子查询,单独按 id 对上述结果进行分组,然后求和(数量)并通过按数量对 GROUP BY 进行排名以某种方式选择供应商值。

我已阅读许多相关帖子,但我未能为此成功应用任何这些方法,包括使用 ROW_NUMBER 和 PARTITION_BY。

我在 Elixir 中使用 Ecto 在 Postgres 数据库上执行此操作,但为了使其通用化以便任何人都可以响应,我只是想了解如何在 SQL 中完成此操作。如果我可以提供更多详细信息,请告诉我,谢谢。

最佳答案

有几种方法,听起来你已经玩过这个了:

with data as (
select *,
row_number() over (partition by id order by qty desc) as rn
from T
)
select id, sum(qty) as total_qty,
(select d2.supplier from data d2
where d2.id = d.id and rn = 1) as most_used_supplier
from data d
group by id;

关于sql - 在 GROUP BY 分组中,根据另一列的最大值选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697461/

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