sql - 如何从单列上带有附加 where 子句的表中进行选择

标签 sql oracle select sum

我在 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/

相关文章:

bash - 漏洞? bash select——键入的数据返回为 "unbound variable"

sql - 在一个查询中分组两次

php - 我可以使用 2 个不同列中的信息来指定在 UPDATE 查询中更新信息的位置吗?

oracle - Oracle中数字格式的最大值是多少?

sql - SQL查询从多个等级/组中选择第一等级1行

mysql - ZF2 查询日期时间列的 DATE() WHERE 子句

sql - 如何在 SQL Server 中连接 unicode 字符串?

MySQL,Concat int 并保存到变量并使用带有 'IN' 或 'NOT IN' 的变量

SQL从分组数据中添加例子

python - 如何通过查询向mysql表中添加新列