【问题标题】:SQLite - Output count of all records per day including days with 0 recordsSQLite - 每天所有记录的输出计数,包括 0 条记录的天数
【发布时间】:2022-07-01 04:07:45
【问题描述】:

我在 AWS 交易所上维护了一个 sqlite3 数据库,该数据库由 Python 脚本定期更新。它跟踪的一件事是任何团队为给定主题生成新帖子时。条目如下所示:

id client team date industry city
895 acme industries blueteam 2022-06-30 construction springfield

我正在尝试创建一个表格,显示每天出现多少 construction 条目。现在,填充有数据的条目,但它们排除了没有条目的日期。例如,如果我只搜索

SELECT date, count(id) as num_records
from mytable
WHERE industry = "construction"
group by date
order by date asc

我会得到如下所示的结果:

date num_records
2022-04-01 3
2022-04-04 1

我怎样才能使 sqlite 输出像这样:

date num_records
2022-04-02 3
2022-04-02 0
2022-04-03 0
2022-04-04 1

我正在尝试根据这些数据生成一些图表,并且需要能够包含目标时间范围内的所有日期。

编辑/更新: 该表尚未包括每个日期;它仅包括与条目相关的日期。如果某一天没有团队帖子工作,date 列将从第 1 天(例如 2022-04-01)跳转到第 3 天(2022-04-03)。

【问题讨论】:

    标签: sql database sqlite


    【解决方案1】:

    假设您的“mytable”表包含您需要的所有日期作为假设,您可以先选择所有日期,然后将LEFT JOIN 应用于您自己的查询,并映射所有结果使用COALESCE 函数将“num_records”字段的 NULL 值设置为“0”。

    WITH cte AS (
        SELECT date, 
               COUNT(id) AS num_records
        FROM mytable
        WHERE industry = "construction"
        GROUP BY date
        ORDER BY date
    )
    SELECT dates.date, 
           COALESCE(cte.num_records, 0) AS num_records
    FROM      (SELECT date FROM mytable) dates
    LEFT JOIN cte
           ON dates.date = cte.date
    

    【讨论】:

    • mytable 不包括所有日期。它仅包括输入数据的日期。因此,如果周末没有工作,date 列中将不会有任何与周末有关的条目。
    • 然后您需要生成一个包含所有潜在日期的表格作为表格,并使用其别名代替“mytable”作为FROM (SELECT date FROM mytable) dates 中的替换。只有这样才能做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2012-08-16
    • 2018-08-28
    • 2012-03-03
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多