sql - 获取组中具有最大值的行加上组的总和
问题描述
基本上,我有一个看起来像这样的表:
Fruit | Juiciness | Brand | Price
---------------------------------
Apple | 2 | A | 0.50
Pear | 1 | A | 0.70
Plum | 6 | A | 0.40
Kiwi | 5 | B | 0.80
Grape | 4 | B | 0.01
我希望输出两行,一行用于品牌 A,一行用于品牌 B,其中包含最多汁水果的名称(最大多汁性值),以及该品牌所有水果的总价格。所以:
Fruit | Brand | Price
---------------------------------
Plum | A | 1.60
Kiwi | B | 0.81
我正在考虑将其分解为几个不同的 CTE/子查询,一个是简单的SUM(Price)
,一个是一个DISTINCT ON
并ORDER BY
获得最多汁的水果,然后将它们重新组合在一起。但不知何故,即使那对我也不起作用。(关于我不想表现出多汁性的事情似乎一直在绊倒 Postgres,但我不确定。)
解决方案
您需要两个聚合:总和和最大值,并且两次都希望按品牌分组。具有挑战性的部分是您也想要水果名称(否则会很容易)。
因此,首先将总和与窗口函数相加,然后为每个组只获取最多汁的水果:
SELECT DISTINCT ON (brand)
fruit,
brand,
sum AS price
FROM (SELECT fruit,
juiciness,
brand,
sum(price) OVER (PARTITION BY brand) AS sum
FROM mytable) AS subq
ORDER BY brand, juiciness DESC;
使用窗口函数,您通常会得到子查询。
推荐阅读
- node.js - 部署后节点应用程序中的 aws-sdk 无法启动
- html - 更改视口没有任何作用 [Blogger]
- javascript - 当您有多个窗口时,Electron ApplicationMenu 仅适用于最后一个窗口
- django - 如何在 Django 中使用 Vue 进行路由?
- nutch - 我使用 rest api 来获取在 nutch 中运行的作业列表(nutch 1.17)
- amazon-web-services - 带有 SSIS ODBC 的 AWS RDS
- r - Rstudio 无法打开或速度非常慢
- logging - 我可以将日志重新填充到 Stackdriver 吗?
- c# - 在c#中反序列化随机json文件
- javascript - 如何为鼠标完成的剪切/粘贴接收 InputEvent