mysql - 通过查找最大值来填充列

标签 mysql

下面是我的一个子查询的输出。我卡在了一点。

ID         | Principal  | Price     |  Difference
102522     | 47000      | 99.9285   |
102522     | 47000      | 100.6801  |  
102522     | 47000      | 99.9285   |  
102522     | 47000      | 100.6801  |  
102522     | 47000      | 99.9285   |  
102522     | 47000      | 100.6801  |  
1048798    | 280000     | 102.3823  |  
1048798    | 280000     | 102.3666  |
1048798    | 280000     | 102.3823  |
1048798    | 280000     | 102.3666  |
1048798    | 280000     | 102.3823  |
1048798    | 280000     | 102.3666  |
1048798    | 280000     | 102.7026  |

我想填充差异列。

它应该是给定 ID 的最高价格与特定 ID 的价格之间的差值。

例如。

ID         | Principal  | Price     |  Difference
102522     | 47000      | 99.9285   |  100.6801 - 99.9285
102522     | 47000      | 100.6801  |  100.6801 - 100.6801
102522     | 47000      | 99.9285   |  100.6801 - 99.9285
102522     | 47000      | 100.6801  |  100.6801 - 100.6801
102522     | 47000      | 99.9285   |  100.6801 - 99.9285
102522     | 47000      | 100.6801  |  100.6801 - 100.6801
1048798    | 280000     | 102.3823  |  
1048798    | 280000     | 102.3666  |
1048798    | 280000     | 102.3823  |
1048798    | 280000     | 102.3666  |
1048798    | 280000     | 102.3823  |
1048798    | 280000     | 102.3666  |
1048798    | 280000     | 102.7026  |

我将不胜感激关于我应该如何进行的任何指示?

最佳答案

你想要的是你的最大值的窗口函数。 MAX(Price) OVER (PARTITION BY ID) 将为您提供每行每个 ID 的最高价格,然后您只需减去该行的价格,因此您的语句如下所示

Select ID, Pricipal, Price, MAX(Price) OVER (PARTITION BY ID) - Price AS Difference
FROM (subquery)

关于mysql - 通过查找最大值来填充列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48552379/

相关文章:

php - 在 php 中 curl 5,000 多个 url 并将它们插入 mysql 数据库的最快方法?

python - Mysql CONCAT 与 peewee

mysql - grails 可以在同一个应用程序中与 MySQL 和 MongoDB 一起工作吗?

MySQL:加入两个计数

php - 没有全文支持;必须有有效的 mysql 数据库搜索引擎;哪里可以找到?

Mysql查询在没有直接关系的两个表之间进行搜索

mysql - 使用一个表中字段的值作为另一表中字段的列名

mysql - 如何计算已执行的 SQL 查询的不同结果?

php - 创建跳转菜单以跳转到不同类别,而无需拆分 MySQL 查询

php - 无法从 while 循环中回显 html <option> 的值