首页 > 解决方案 > 如何使用 AND 和 OR 运算符简化 SQL 查询以检索特定列的总和?

问题描述

我想根据表项和计划从项目表中获取书籍和笔的comp_id总和expirationdate

下面是表格的样子:

在此处输入图像描述

我想得到书和笔的总和comp_id = 1;书籍的输出应为 15,钢笔的输出应为 30。

我有这个查询,它工作正常

SELECT SUM(books) AS books, SUM(pens) AS pens
FROM plan 
JOIN item ON plan.id = item.plan_id 
          AND item.comp_id = '1'  
          AND (item.expiry IS NULL OR item.expiry > NOW()) ;

我怎样才能简单地进行上述查询?

有人可以帮我解决这个问题吗?谢谢

标签: sql

解决方案


我可以提出一些建议。

  1. 将连接条件与过滤逻辑分开,这使得查询的意图更加清晰。
  2. 使用表别名
  3. 使用 COALESCE(item.expiry, DATE '9999-12-31') 删除 OR 条件。
SELECT SUM(p.books) AS books, SUM(p.pens) AS pens
FROM plan p
  JOIN item i ON i.plan_id = p.id
WHERE i.comp_id = '1'
  AND COALESCE(i.expiry, DATE '9999-12-31') > NOW();

推荐阅读