【问题标题】:Returning 0 when there are no entries in SQL [closed]当 SQL 中没有条目时返回 0 [关闭]
【发布时间】:2021-01-25 01:17:26
【问题描述】:

我正在尝试填充图表,但是,如果没有条目,则不会打印任何内容。当什么都不存在时,它应该返回一个“0”。

我尝试在我的 COUNT 上使用 IFNULL,但这没有任何区别。

SQL:

SELECT DATE_FORMAT(date(created_at), "%d. %b") AS date, IFNULL(count(*), 0) as count 
FROM users
WHERE created_at BETWEEN NOW() - INTERVAL 14 DAY AND NOW()
Group by date
ORDER BY date(created_at) ASC

【问题讨论】:

  • 生成的数据是什么以及如何生成图表?
  • 我正在使用 Larapex,它是 ApexCharts 的包装器。结果很好,但是当有新的一天并且还没有注册时,图表就会被切断,因为它确实没有返回任何内容而不是“0”
  • 您可能会觉得这很有帮助:Count Returning blank instead of 0.
  • 考虑处理应用代码中数据显示的问题

标签: mysql sql datetime count recursive-query


【解决方案1】:

我了解到您想填写该范围内缺少的日期。

一种选择是首先生成整个期间的日期系列,然后将带有left join 的表格带到表格中,然后进行汇总。同样,一个选项使用递归查询,在 MySQL 8.0 中可用:

with recursive dates as (
    select current_date - interval 14 day dt
    union all
    select dt + interval 1 day from dates where dt < current_date
)
select date_format(d.dt, '%d. %b'), count(u.created_at) cnt
from dates d
left join users u 
    on  u.created_at >= d.dt
    and u.created_at <  d.dt + interval 1 day
group by d.dt, date_format(d.dt, '%d. %b')
order by d.dt

【讨论】:

  • “日期”有什么作用?如果我使用它,我会收到一个错误,即没有名为“日期”的列。
  • @CunnertA:dates 是过去 14 天的一系列日期,如答案本身所述。但这缺少 recursive 关键字 - 现已修复。
  • 现在它没有吐出错误但什么也没有。我检查了语法,但它似乎是有效的。我需要在某处使用 SELECT 吗?因为当我将 SELECT 添加到开头时,我的 IDE 的语法也会突出显示所有内容,现在它只是绿色的。虽然我在一开始就尝试使用 SELECT,但我得到了一个错误。
  • 我现在开始工作了。我仍然使用“count”而不是“cnt”。此外,date_format(d.dt, '%d. %b.') 之后应该有“日期”,因此它也会打印正确的日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 2016-03-16
  • 1970-01-01
相关资源
最近更新 更多