如何计算另一个 table 中连接查询的结果值?

How to count result values from join query in another table?

我有两个 table 是这样的:

     table1(user, id, sex)   table2(user, name, sex)
     jjj 123 m               jjj John m      
     jjj 124 m               bbb Bob  m 
     jjj 125 m               ppp Pete f 
     bbb 126 m
     bbb 127 f
     ppp 128 f
     ppp 129 m
     ppp 130 m
     

我想要结果 table,其中显示来自 table 2 的所有用户的姓名和性别,他们在某个时候改变了他们的性别,以及每个名字有多少用户的计数。所以这就是结果 table:

    (user, name, sex, count)
     bbb Bob  m 2
     ppp Pete f 3

我目前正在使用此查询:

select table2.user, table2.name, table2.sex, count(*)
from table1
join table2 on table1.user = table2.user
where table1.sex <> table2.sex
group by table2.user, table2.name, table2.sex
order by user

然而,计数列仅从生成的联接 table 开始计数,而不是从原始 table1 开始计数。有任何想法吗?谢谢。

如果我没听错,一个选项是使用横向连接和过滤:

select t2.*, t1.cnt
from table2 t2
inner join lateral (
    select count(*) as cnt, min(sex) as minsex, max(sex) as maxsex
    from table1 t1
    where t1.user = t2.user 
) t1 on t1.minsex <> t1.maxsex or t1.minsex <> t2.sex

基本上,此过滤器 table1 具有不同 sexsextable2 不同的用户。