PostgreSQL - max(count()) 聚合与分组依据

PostgreSQL - max(count()) agregation with group by

我有一个 table,其中包含独特的交易以及交易年份和执行交易的员工。我需要找到每年交易最多的员工。

我需要一个 table 每年,员工在那一年进行最多交易,以及他们在那一年进行的交易数量。 这是我在不产生错误的情况下所能得到的最接近的结果。我无法在不产生聚合错误的情况下 select 员工。

select year, max(num_trans)
from (select year, employee, count(trans_id) as num_trans
      from transactions
      group by year, employee) as x
group by year

我很好奇如何解决这个问题。

使用distinct on:

select distinct on (year) year, employee, count(*) as num_trans
from transactions
group by year, employee
order by year, count(*) desc; 

distinct on 是对标准 SQL 的方便的 Postgres 扩展,它将第一行保留在一组行中。这些组由 distinct on 键定义。第一行由 order by.

决定