gpt4 book ai didi

sql - 仅当 SQL 中存在行时返回值

转载 作者:行者123 更新时间:2023-11-29 11:49:23 25 4
gpt4 key购买 nike

我有一个 sql 查询,我想在其中检查某个帖子是否已被当前用户点赞。

我目前通过检查帖子的现有点赞以及其中一个是否具有当前用户 ID 作为用户 ID 来执行此操作。

但是,我在查询中执行此操作时遇到了问题。顺便说一句,我正在使用 PostgresSQL。

当我执行以下操作时:

CASE WHEN likes.user_id = 5 THEN 1 END AS "liked"

我需要在 GROUP BY 子句中添加 likes.user_id,这会导致每个帖子有多个结果,因为它按喜欢对它们进行分组。

我也尝试用一个环绕它的计数来做到这一点,但由于我使用 Knex 和 express,整数被转换为字符串,这是我不想要的。

有什么我没有看到或做错的吗?

PostgresSQL 中的完整查询是:

select 
posts.id,
posts.created_at,
posts.text,
posts.title,
count(DISTINCT likes.id) as "likeCount",
count(DISTINCT comments.id) as "commentCount",
count(CASE WHEN likes.user_id = 5 THEN 1 END) AS "liked"
from updates
LEFT JOIN comments ON updates.id = comments.update_id
LEFT JOIN likes ON updates.id = likes.update_id
WHERE posts.user_id = 5
GROUP BY posts.id, likes.user_id
ORDER BY updates.created_at

我现在得到的结果是(简化):

╔════╤═══════════════════════════════╤═══════════════╤════════════╤═══════╗
║ id │ created_at │ comment_count │ like_count │ liked ║
╠════╪═══════════════════════════════╪═══════════════╪════════════╪═══════╣
║ 40 │ 2017-09-21 11:53:11.064774+02 │ 1 │ 0 │ 0 ║
╟────┼───────────────────────────────┼───────────────┼────────────┼───────╢
║ 40 │ 2017-09-21 11:53:11.064774+02 │ 1 │ 0 │ 0 ║
╟────┼───────────────────────────────┼───────────────┼────────────┼───────╢
║ 40 │ 2017-09-21 11:53:11.064774+02 │ 1 │ 0 │ 1 ║
╚════╧═══════════════════════════════╧═══════════════╧════════════╧═══════╝

最佳答案

使用条件聚合:

MAX(CASE WHEN likes.user_id = 5 THEN 1 ELSE 0 END) AS liked

如果至少有一个来自用户 5 的点赞,则为 1,否则为 0。

(这应该会产生一个整数。如果您的框架妨碍了您,您可以通过 MAX(...)::integer AS liked 强制执行此操作。)

关于sql - 仅当 SQL 中存在行时返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46344785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com