sql - 如何使用 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()) ;
我怎样才能简单地进行上述查询?
有人可以帮我解决这个问题吗?谢谢
解决方案
我可以提出一些建议。
- 将连接条件与过滤逻辑分开,这使得查询的意图更加清晰。
- 使用表别名
- 使用 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();
推荐阅读
- java - Hibernate 不在查询注解中注入参数
- c - 为什么我的编码中有未定义的数据类型?
- laravel - Laravel Breeze 模板代码工作流程
- python - 函数体中的 Python NameError
- reactjs - 如何在 Gatsby 的标题中添加滚动事件
- java - 如何为倒数计时器设置 TextSwitcher
- docker - 在 Dockerfile 中运行 systemd 作为 pid 1
- java - 如果今天是星期日,为什么设置 DAY_OF_WEEK 重复闹钟不更改日期?
- r - 无法在 R Markdown 中编织 histogram() 函数
- json - 在 tensorflow.js 中显示 Val Acc