我有下表company_likes
:
Table "public.company_likes"
Column | Type | Modifiers
------------+--------------------------------+------------------------
company_id | integer | not null
user_id | integer | not null
created_at | timestamp(0) without time zone | not null default now()
Indexes:
"company_likes_pkey" PRIMARY KEY, btree (company_id, user_id)
Foreign-key constraints:
"company_likes_company_id_foreign" FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
"company_likes_user_id_foreign" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)
表的结构companies
并不重要,因为您可以从输出中的外键详细信息中推断出此问题所需的任何内容\d company_likes
。
我正在尝试获取一组公司的点赞数。我尝试了以下方法:
select company_id, count(company_id) as likes_count from company_likes where company_id in (1,2,3,4) group by company_id;
Run Code Online (Sandbox Code Playgroud)
根据这个 StackOverflow 答案,我也尝试过:
select company_id, count(company_id) as likes_count from company_likes
left join companies on companies.id = company_likes.company_id
where company_id in (1,2,3,4)
group by company_id;
Run Code Online (Sandbox Code Playgroud)
然而,这两种情况的输出都是空结果。我会喜欢这样的东西
company_id | likes_count
------------+-------------
1 | 0
2 | 0
3 | 0
4 | 0
Run Code Online (Sandbox Code Playgroud)
我应该使用什么查询来获得这样的结果?
VALUES
从您想要包含的内容开始。
SELECT company_id, count(company_id) as likes_count
FROM (VALUES (1),(2),(3),(4))
AS gs(id)
LEFT OUTER JOIN company_likes USING (id)
LEFT OUTER JOIN companies
ON companies.id = company_likes.company_id
GROUP BY company_id;
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否是一个好主意,我不得不质疑为什么你要选择可能不存在的 ID。
我明白您的查询中有什么问题
where company_id in (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
但是,company_id
仅当连接成功时才存在。如果没有喜欢,就没有什么可以加入反对,所以你需要,
where companies.id in (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7975 次 |
最近记录: |