PostgreSQL从一个表中选择全部,并从表关系中选择联接计数

PostgreSQL从一个表中选择全部,并从表关系中选择联接计数,sql,postgresql,join,count,psql,Sql,Postgresql,Join,Count,Psql,我有两个表,post\u categories和posts。我正在尝试从post_类别中选择*,但也返回一个临时列,其中包含每次在文章上使用文章类别时的计数 帖子 | id | name | post_category_id | | 1 | test | 1 | | 2 | nest | 1 | | 3 | vest | 2 | | 4 | zest | 3 | |

我有两个表,
post\u categories
posts
。我正在尝试
从post_类别中选择*,但也返回一个临时列,其中包含每次在文章上使用文章类别时的计数

帖子

| id | name | post_category_id |
| 1  | test | 1                |
| 2  | nest | 1                |
| 3  | vest | 2                |
| 4  | zest | 3                |
| id | name  |
| 1  | cat_1 |
| 2  | cat_2 |
| 3  | cat_3 |
帖子类别

| id | name | post_category_id |
| 1  | test | 1                |
| 2  | nest | 1                |
| 3  | vest | 2                |
| 4  | zest | 3                |
| id | name  |
| 1  | cat_1 |
| 2  | cat_2 |
| 3  | cat_3 |
基本上,我尝试在不使用子查询的情况下使用联接来实现这一点。类似这样的东西,但在real
psql

从帖子类别中选择*某种类型的加入帖子,计数(*)

因此,理想情况下

| id | name  | count |
| 1  | cat_1 | 2     |
| 2  | cat_2 | 1     |
| 3  | cat_3 | 1     |

非常感谢您的帮助:D

您可以使用一个派生表,该表包含每个
post\u category\u id
的计数,并将其左键连接到
post\u categories

select p.*, coalesce(t1.p_count,0)
from post_categories p
left join (
    select post_category_id, count(*) p_count
    from posts
    group by post_category_id
) t1 on t1.post_category_id = p.id

可能您的表名不完全是
post_categories
:(很遗憾:/n如果存在post_categories.id、post_categories.name以外的任何其他列,您还必须在聚合函数中使用它们。是的,您是对的!答案已更新。然后进入睡眠状态:)