我在 Oracle 中制定 SQL 查询时遇到问题。这是我的示例表:
+----+-----------+-----------+--------+
| id | start | end | number |
+----+-----------+-----------+--------+
| 1 | 21-dec-19 | 03-jan-20 | 12 |
| 2 | 23-dec-19 | 05-jan-20 | 10 |
| 3 | 02-jan-20 | 15-jan-20 | 9 |
| 4 | 09-jan-20 | NULL | 11 |
+----+-----------+-----------+--------+
这是我到目前为止所得到的:
SELECT
SUM(number) AS total_number,
SUM(number) AS total_ended_number -- (WHERE end IS NOT NULL)
FROM table
WHERE ... -- a lot of where clauses
以及期望的结果:
+--------------+--------------------+
| total_number | total_ended_number |
+--------------+--------------------+
| 42 | 31 |
+--------------+--------------------+
我知道我可以在“total_ending_number”内进行单独的选择,但初始选择已经有一堆 where 子句,这些子句也需要应用于内部选择。
我能够将其表述为 2 个单独的选择或 2 个嵌套选择,并复制所有 where 子句,但我的预期目标是不重复将在表上使用的 where 子句。
最佳答案
您可以使用以下逻辑对 case
表达式进行sum
:
SELECT
SUM(number) AS total_number,
SUM(CASE WHEN end IS NOT NULL THEN number END) AS total_ended_number
FROM table
WHERE ... -- a lot of where clauses
关于sql - 如何从单列上带有附加 where 子句的表中进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61136185/