sql - 根据其他列的最大值选择值
问题描述
我有几个关于我想在 Postgres 中制作的表格的问题。下表是我的输入:
ID | 区域 | 数数 | 功能 |
---|---|---|---|
1 | 100 | 20 | 活的 |
1 | 200 | 30 | 行业 |
2 | 400 | 10 | 活的 |
2 | 400 | 10 | 行业 |
2 | 400 | 20 | 教育 |
3 | 150 | 1 | 行业 |
3 | 150 | 1 | 教育 |
我想分组id
并function
基于max
area
. 总结面积和计数的行。当面积相等时,它应该基于最大计数,当面积和计数相等时,它应该基于先验功能(我仍然必须决定教育是否先于工业,反之亦然)。所以结果应该是:
ID | 区域 | 数数 | 功能 |
---|---|---|---|
1 | 300 | 50 | 行业 |
2 | 1200 | 40 | 教育 |
3 | 300 | 2 | 行业 |
我尝试了很多东西,也许这很容易,但我不明白。有人可以帮助获得正确的 SQL 吗?
解决方案
一种方法使用row_number()
和条件聚合:
select id, sum(area), sum(count),
max(function) over (filter where seqnum = 1) as function
from (select t.*,
row_number() over (partition by id order by area desc) as seqnum
from t
) t
group by id;
另一种方法使用“distinct on”:
select id, sum(area) over (partition by id) as area,
sum(count) over (partition by id) as count,
function
from t
order by id, area desc;
推荐阅读
- ios - 减少 Rectangle SwiftUI 的可点击区域
- python - Pandas - 如何删除点后的数字
- c++ - 了解未定义的 const 行为
- node.js - 将角度 9 更新为 11 时出现许多错误
- javascript - 为什么接头不能按预期工作
- javascript - Fill() 将多余的数组变量分配给单个变量
- javascript - 递归 JavaScript 函数的 Chrome 问题
- python - 如何从另一个重新定义的 python 文件中调用变量
- openfoam - 使用 interfoam 求解器在焊接中移动热源的代码提供了高斯热分布
- powershell - 使用 WMI 类输出