【发布时间】:2018-04-04 23:55:23
【问题描述】:
我正在尝试编写一个为 python 脚本输出数据的 sql 查询。 python 脚本最终会将该数据推送到一个表中,以便使事情更顺畅,我决定将输出转换为 char。
我拥有的数据按 15 分钟的周期组织。数据 A 和数据 B 存储在一个表中,并具有列 start_time(作为日期时间)、计数 A 和计数 B。第二个表具有 start_time(作为日期时间)和计数 C。
我需要的是每天 A、B 和 C 的总和。但是,我想有条件地求和,它只计入其他两个数据计数在 15 分钟内不为 NULL 的总和中。例如,如果 15 分钟期间的“行”有 A 和 B 的数据,但没有 C,则它不会计入总和。如何实现这个条件?
示例输出:
date| SUM(A) | SUM(B) | SUM(C)
我可以在没有这样的条件的情况下编写(sql 新手):
SELECT
DATE('timezone conversion') AS date,
cast(SUM(p1.COUNT_DATA_A) as char)
AS A,
cast(SUM(p1.COUNT_DATA_B) as char)
AS B,
cast(SUM(p2.COUNT_DATA_C) as char)
AS C
FROM
table_data_A_B
AS p1
LEFT JOIN table_data_C
AS p2 ON p1.start_time = p2.start_time
WHERE
DATE('timezone conversion') >= '2018-03-27'
AND DATE('timezone conversion') < '2018-03-29'
GROUP BY DATE('timezone conversion')
ORDER BY DATE(p1.start_time) DESC
我将如何在此查询中实现条件?我很感激帮助。一般来说,我对stackoverflow、编码和sql有点陌生,但我会尽力提供帮助。
【问题讨论】:
-
您的意思是 p2.COUNT_DATA_C 为空还是 table_data_C 在给定的 15 分钟内没有 start_time?
-
@âńōŋŷXmoůŜ 当 count_data_c 为空时。 start_time 是一个主键,所以我认为它永远不应该为空。
-
感谢您的回复。 Barmar 已经回答了您的问题,并且是正确的