大家早上好
我有一个 PostgreSQL 表,指定两个人之间的聊天。
柱表:
id (主键)
professional_id (外键)
request_id (外键)
留言
创建者 (外键)
创建于
阅读于
我需要有聊天列表,对于每个聊天,我需要有未读消息的数量(即 read_at IS NULL)。
这是获取该请求的聊天列表的查询
SELECT
rm.professional_id,
CONCAT(u.first_name, ' ', u.last_name) AS professional_full_name,
FROM request_messages AS rm
LEFT JOIN users AS u ON (rm.professional_id = u.id)
WHERE rm.request_id = $1
GROUP BY rm.professional_id, professional_full_name
我需要在第三列中显示 COUNT,其中 read_at IS NULL
使用聚合
FILTER
子句。参见:
SELECT rm.professional_id
, concat_ws(' ', u.first_name, u.last_name) AS professional_full_name
, rm.unread_count
FROM (
SELECT professional_id
, count(*) FILTER (WHERE read_at IS NULL) AS unread_count
FROM request_messages
WHERE request_id = $1
GROUP BY professional_id
) rm
LEFT JOIN users u ON rm.professional_id = u.id;
此外,通常最好先聚合,然后再加入:
关于
concat_ws()
: