我有下面的PostgreSQL表,这是一个巨大的表的小样本

employee

emp_id | salary | rating | increment_year
--------------------------------------
28      3000      1         2023
25      2000      2         2023
30      1500      1         2021
28      1000      3         2022
32      1200      1         2023
23      1550      1         2023
30      2500      3         2022        
30      3000      2         2023

我想要执行一个PostgreSQL查询 group by emp_id,返回emp_id, sum(salary), get rating value based on latest increment_year, latest increment_year that was selected to get rating value

查询结果示例

emp_id | sum_salary | selected_rating_on_latest_increment_year | selected_increment_year_to_get_rating
------------------------------------------------------------------------------------------------------
28       4000         1                                         2023

value goes on for every emp_id

由于某些预先存在的情况,我必须使用group by.所以,如果可能的话,分组进行是我必须做的.

推荐答案

作为一种详细的替代方法,您可以使用scalar subquery作为selected_rating_on_latest_increment_year的值,而不是连接.其余的将来自有group by分的t个CTE.

with t as
(
  select emp_id, sum(salary) sum_salary, max(increment_year) increment_year
  from employee
  group by emp_id
) select emp_id, sum_salary, 
         (
           select rating from employee
           where emp_id = t.emp_id and increment_year = t.increment_year
         ) selected_rating_on_latest_increment_year,
         increment_year
 from t;

DB-Fiddle

Sql相关问答推荐

如何在PostgreSQL中同时为id s列表执行多个update语句?'

LAG函数通过丢弃空值返回前一行

在多个柱上连接时,如何确定连接条件?

具有多个条件的SQL否定

以一致的价值获得独特的价值

如何在AWS Athena中 Select JSON数组的最后一个元素?

此过程如何在不引用传递的参数值的情况下执行工作?

如何解决错误;ORA-00911:无效字符;在果朗?

根据不同日期标准分配组的逻辑

如何为给定的股票数据集计算利润/亏损,确保先卖出先买入的股票

将varchar (7)列转换为datetime

SQL 多个不满足的条件失败

SQL Server: 将JSON对象数组转换为表格格式

如何在插入时将字符串'03-January-2023'转换为日期时间

我需要遍历权重值表并确定每个权重是否有效

BigQuery - 将 TIMESTAMP 转换为 HH:MM:SS,然后识别 TIME_DIFF

将单行中的多个行值转换为列

SQL Server Where 条件

Lag() 获取snowflake的值变化

在 MindsDB SQL 编辑器中运行 PostgreSQL 条目 ID 时出现未知 Select 目标错误