【问题标题】:Left Join COUNT on tables表上的左连接 COUNT
【发布时间】:2013-06-18 20:03:54
【问题描述】:

我有 2 张桌子:

puid | personid | ptitle
----------------------------
1    | 200      | richard
2    | 201      | swiss

suid | personidref | stitle
----------------------------
1    | 200         | alf
2    | 201         | lando
3    | 200         | willis
4    | 201         | luke
5    | 201         | kojak
6    | 200         | r2-d2
7    | 201         | jabba

我正在尝试使用表 2 的计数离开联接。我试图弄清楚使用generate_series 或子选择,但我无法处理语法。

英文:显示表一中每个唯一的人,并计算表二中每个条目的计数。

示例输出:

puid | personid | ptitle  | count
---------------------------------
1    | 200      | richard | 3
2    | 201      | swiss   | 4

这是一个简单的子查询吗?generate_series 是适合这项工作的工具吗?

【问题讨论】:

  • generate_series() 在这里没有任何作用。这是LEFT JOINGROUP BY 的简单问题。
  • 我会回去阅读generate_series 的文档并尝试正确应用用例,谢谢

标签: sql postgresql count left-join


【解决方案1】:
select *
from
    t1
    left join
    (
        select personidref, count(*) total
        from t2
        group by personidref
    ) s using(personidref)
order by puid

请注意,在加入之前进行聚合可能比之后进行聚合有性能提升。

【讨论】:

  • 所以这是一个新手问题......所以子查询总是先触发然后对吗?因此该产品可用于主查询。我会玩弄这个的各种版本来适应它。谢谢!
  • @robert 因为它要加入一个计算表,所以显然必须先计算它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
相关资源
最近更新 更多