You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL RIGHT JOIN结果过滤:移除不属于指定用户的分类

修正后的费用统计查询方案

问题分析

原查询使用RIGHT JOIN categories会返回所有分类,包括未分配给用户1的分类(如"Fancy food")。需要先限定仅处理用户1关联的分类,再关联费用数据进行统计。

修正后的查询语句

SELECT 
    c.name AS name,
    COALESCE(COUNT(e.id), 0) AS count,
    COALESCE(ROUND(SUM(e.price)::numeric, 2), 0.00) AS sum
FROM users_categories uc
INNER JOIN categories c 
    ON uc.category_id = c.id
LEFT JOIN expenses e 
    ON e.category_id = c.id 
    AND e.user_id = 1
    AND (EXTRACT(YEAR FROM e.date) = 2022 OR 2022 IS NULL)
    AND (EXTRACT(MONTH FROM e.date) = 8 OR 8 IS NULL)
WHERE uc.user_id = 1
GROUP BY c.id, c.name
ORDER BY c.id;

关键调整说明

  • 限定用户分类范围:通过users_categories与categories的内连接,只保留用户1拥有的分类,彻底排除无关分类。
  • 左连接费用表:使用LEFT JOIN确保即使分类下没有费用记录也会被保留,满足无费用分类显示0的需求。
  • 条件前置过滤:将费用的用户ID和日期筛选放在JOIN条件中,避免WHERE子句过滤掉无费用的分类行。
  • 空值处理:用COALESCE将聚合后的null值转为0,统一统计结果格式。

内容的提问来源于stack exchange,提问作者Yurii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:48:20