查询以按天计数故障测试用例和分组,但缺少“ 0”

时间:2019-07-11 08:17:04

标签: sql

我正在用Grafana设置一些仪表板,以计算功能测试的每日通过和失败次数。我对下面的SQL代码感到厌倦,但是它永远不会显示0数据(如果一天之内没有任何失败,该日期将不会出现在查询结果集中)。

我认为这是平台无关的问题。

SELECT
  count(status) AS "Fail"
FROM function_test
WHERE status = false
GROUP BY date_time

预期结果:

-----------------------
day01       |   100
-----------------------
day02       |   200
-----------------------
day03       |   0
-----------------------
day04       |   10
-----------------------

实际结果:

-----------------------
day01       |   100
-----------------------
day02       |   200
-----------------------
day04       |   10
-----------------------

SQL执行顺利,没有错误消息。

3 个答案:

答案 0 :(得分:1)

也许您可以在这里找到答案 https://blog.csdn.net/ouyang111222/article/details/77638826

建立最近7天的结果集,然后对查询的结果集进行左连接

select a.click_date,ifnull(b.count,0) as count
from (
    SELECT curdate() as click_date
    union all
    SELECT date_sub(curdate(), interval 1 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 2 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 3 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 4 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 5 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 6 day) as click_date
) a left join (
  select date(create_time) as datetime, count(*) as count
  from arms_task
  group by date(create_time)
) b on a.click_date = b.datetime;

答案 1 :(得分:1)

也许我自己也回答了这个问题。

只需选择所有行(否WHERE仅在第一行选择所有行)并执行条件计数即可。

代码如下。

SELECT
  count(IF(status = false,true,null)) AS "Fail"
FROM function_test
GROUP BY date_time

答案 2 :(得分:0)

您可以使用IF语句过滤0个值

IF(status = false,true,null)

使用此查询命令,您可以过滤空行