【问题标题】:How to count result values from join query in another table?如何计算另一个表中连接查询的结果值?
【发布时间】:2021-03-01 06:15:46
【问题描述】:

我有两张这样的表:

     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
     

我想要一个结果表,它显示表 2 中所有用户的姓名和性别,这些用户在某个时间点改变了他们的性别,以及每个姓名拥有多少用户的计数。所以这将是结果表:

    (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

但是,计数列仅从生成的连接表中计数,而不是从原始表 1 中计数。有任何想法吗?谢谢。

【问题讨论】:

    标签: sql postgresql count inner-join lateral-join


    【解决方案1】:

    如果我正确地遵循了这一点,一个选项使用横向连接和过滤:

    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 不同的用户。

    【讨论】:

      猜你喜欢
      • 2016-05-23
      • 2013-10-28
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      相关资源
      最近更新 更多