Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在单个查询中使用多个计数_Sql_Sql Server - Fatal编程技术网

Sql 在单个查询中使用多个计数

Sql 在单个查询中使用多个计数,sql,sql-server,Sql,Sql Server,我在下面有一个查询,我想返回一天的关键和警告警报总数,但我的问题是,当我在一定的天数范围内执行此操作时,它会添加指定日期的关键警报 SELECT alertDate as "Alert Date", (SELECT COUNT(alertType) FROM alerts WHERE alertDate BETWEEN '2016/02/15' AND '2016/02/16' AND UPPER(alertType)='CRITICAL') as Critical, (SELE

我在下面有一个查询,我想返回一天的关键和警告警报总数,但我的问题是,当我在一定的天数范围内执行此操作时,它会添加指定日期的关键警报

SELECT alertDate as "Alert Date",
    (SELECT COUNT(alertType) FROM alerts WHERE alertDate BETWEEN '2016/02/15' AND '2016/02/16' AND UPPER(alertType)='CRITICAL') as Critical,
    (SELECT COUNT(alertType) FROM alerts WHERE alertDate BETWEEN '2016/02/15' AND '2016/02/16' AND UPPER(alertType)='WARNING') as Warning
FROM alerts
where alertDate BETWEEN '2016/02/15' AND '2016/02/16'
GROUP BY alertDate;
尝试了上面的代码,但显然我无法在子查询中添加“group by”子句,我认为这就是问题所在,请提供有关如何进行此操作的帮助…

您可以使用sum(case)来实现此目的:

SELECT alertDate as "Alert Date",
    sum(case when UPPER(alertType)='CRITICAL' then 1 end) as Critical,
    sum(case when UPPER(alertType)='WARNING' then 1 end) as Warning
FROM alerts
where alertDate BETWEEN '2016/02/15' AND '2016/02/16'
GROUP BY alertDate;
您可以使用sum(case)进行以下操作:

SELECT alertDate as "Alert Date",
    sum(case when UPPER(alertType)='CRITICAL' then 1 end) as Critical,
    sum(case when UPPER(alertType)='WARNING' then 1 end) as Warning
FROM alerts
where alertDate BETWEEN '2016/02/15' AND '2016/02/16'
GROUP BY alertDate;

您需要条件聚合--
案例
位于聚合函数内部。我将这样写:

SELECT alertDate as AlertDate,
       SUM(CASE WHEN UPPER(alertType) = 'CRITICAL' THEN 1 ELSE 0 END) as Critical,
       SUM(CASE WHEN UPPER(alertType) = 'WARNING' THEN 1 ELSE 0 END) as WARNING
FROM alerts a
WHERE alertDate BETWEEN '2016-02-15' AND '2016-02-16'
GROUP BY alertDate;
如果您使用的是MySQL,您可以将其短接到:

SELECT alertDate as AlertDate,
       SUM(UPPER(alertType) = 'CRITICAL') as Critical,
       SUM(UPPER(alertType) = 'WARNING') as Warning
FROM alerts a
WHERE alertDate BETWEEN '2016-02-15' AND '2016-02-16'
GROUP BY alertDate;
请注意其他几个变化:

  • 不需要子选择
  • 我删除了
    AlertDate
    中的空格。我只是不喜欢需要转义的列别名
  • 我将日期文本中的
    /
    替换为
    -
    ——连字符与ISO 8601兼容

您需要条件聚合--
大小写在聚合函数中。我将这样写:

SELECT alertDate as AlertDate,
       SUM(CASE WHEN UPPER(alertType) = 'CRITICAL' THEN 1 ELSE 0 END) as Critical,
       SUM(CASE WHEN UPPER(alertType) = 'WARNING' THEN 1 ELSE 0 END) as WARNING
FROM alerts a
WHERE alertDate BETWEEN '2016-02-15' AND '2016-02-16'
GROUP BY alertDate;
如果您使用的是MySQL,您可以将其短接到:

SELECT alertDate as AlertDate,
       SUM(UPPER(alertType) = 'CRITICAL') as Critical,
       SUM(UPPER(alertType) = 'WARNING') as Warning
FROM alerts a
WHERE alertDate BETWEEN '2016-02-15' AND '2016-02-16'
GROUP BY alertDate;
请注意其他几个变化:

  • 不需要子选择
  • 我删除了
    AlertDate
    中的空格。我只是不喜欢需要转义的列别名
  • 我将日期文本中的
    /
    替换为
    -
    ——连字符与ISO 8601兼容

您可能应该使用如下条件计数

SUM( case when alertDate BETWEEN '2016/02/15' AND '2016/02/16' 
     AND UPPER(alertType)='CRITICAL' then 1 else 0 end) as Critical,

您可能应该使用条件计数,如

SUM( case when alertDate BETWEEN '2016/02/15' AND '2016/02/16' 
     AND UPPER(alertType)='CRITICAL' then 1 else 0 end) as Critical,

您能否提供一些您的查询没有解决的预期结果?您可以选择MySQL或SQL Server吗?它们都非常不同…我删除了不兼容的数据库标记。请用您真正使用的数据库进行标记。很抱歉,我使用的是SQLServer。您能否向我们提供一些您的查询未解决的预期结果?您能否选择MySQL或SQL Server?它们都非常不同…我删除了不兼容的数据库标记。请使用您真正使用的数据库进行标记。对不起,我使用的是sqlserver