我试图构建一个查询,将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分组以上结果,然后汇总(qty),并通过qty在GROUP BY中的排名来选择供应商的值。
我已经阅读了很多相关帖子,但是我未能成功地将这些方法应用到这个问题上,包括使用ROW_NUMBER和PARTITION_BY。
我正在使用Elixir和Ecto在Postgres数据库中执行此操作,但为了使其通用,让任何人都可以回答,我只是想了解如何在SQL中完成此操作。 如果需要更多细节,请告诉我,谢谢。