Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
如何在mysql查询中获取和的和?_Mysql_Sql - Fatal编程技术网

如何在mysql查询中获取和的和?

如何在mysql查询中获取和的和?,mysql,sql,Mysql,Sql,我有sql查询查找apiCount和javascriptCount现在我想要一个计数作为apiCount+javascriptCount我怎么做请帮助我。我试图在谷歌上找到许多解决方案,但我不能得到我的问题的确切解决方案 SELECT display , SUM(CASE WHEN category = 2 AND (statusCode != -1 AND statusCode != 400 AND statusCode != 401) THEN 1 ELSE 0 END) apiC

我有sql查询查找apiCount和javascriptCount现在我想要一个计数作为apiCount+javascriptCount我怎么做请帮助我。我试图在谷歌上找到许多解决方案,但我不能得到我的问题的确切解决方案

SELECT  display , 
  SUM(CASE WHEN category = 2 AND (statusCode != -1 AND statusCode != 400  AND statusCode != 401) THEN 1 ELSE 0 END) apiCount, 
  SUM(CASE WHEN category = 1 THEN 1 ELSE 0 END) javascriptCount 
FROM error 
WHERE  `occurance` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
GROUP BY display

这是我的查询,我想在同一个查询中求apiCount和javascriptCount之和。

使用“+”运算符将其相加 或者您可以将这两种逻辑结合起来进行计数

SELECT  display , 
SUM(CASE WHEN category = 2 AND (statusCode != -1 AND statusCode != 400  AND statusCode != 401) THEN 1 ELSE 0 END)+SUM(CASE WHEN category = 1 THEN 1 ELSE 0 END) 
 totalCount,occurance 
 FROM error WHERE  `occurance` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY display

可以组合两个大小写表达式以获得组合的和:

SELECT  display , 
  SUM(CASE WHEN category = 2 AND (statusCode != -1 AND statusCode != 400  AND statusCode != 401) THEN 1 ELSE 0 END) apiCount, 
  SUM(CASE WHEN category = 1 THEN 1 ELSE 0 END) javascriptCount,
  SUM(CASE WHEN category = 2 AND (statusCode != -1 AND statusCode != 400  AND statusCode != 401) OR category = 1 THEN 1 ELSE 0 END) totalCount, 
  occurance 
FROM error 
WHERE  `occurance` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
GROUP BY display

将原始查询包装到派生表中。然后您可以计算apiCount+javascriptCount:

select dt.*, apiCount + javascriptCount
from
(
    SELECT  display , 
      SUM(CASE WHEN category = 2 AND (statusCode != -1 AND statusCode != 400  AND statusCode != 401) THEN 1 ELSE 0 END) apiCount, 
      SUM(CASE WHEN category = 1 THEN 1 ELSE 0 END) javascriptCount,
      occurance 
    FROM error 
    WHERE  `occurance` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
    GROUP BY display
) dt

在mysql中最简单的可以和条件求和,条件建立后加一个,否则不加

你可以试试这个

SELECT display, 
       SUM(category = 2 AND (statusCode != -1 AND statusCode != 400  AND statusCode != 401)) apiCount, 
       SUM(category = 1 ) javascriptCount,
       SUM((category = 2 AND (statusCode != -1 AND statusCode != 400  AND statusCode != 401)) OR category = 1) totalCount,
       occurance 
FROM error 
WHERE  `occurance` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
GROUP BY display

您好,请尝试以下查询

选择显示, 当 类别=2和状态代码!=-1和状态代码!=400和状态码!=401-apiCount 或category=1-javascriptCount 然后1或0结束apiCount和javascriptCount, 发生 从错误
其中'occurance`>=DATE\u subcommurate,INTERVAL 7 DAY GROUP BY displayYou second suggestion将不起作用,因为类别为1时也会检查状态码。这更好,但是类别in=2有语法错误。我注意到表达式occurance没有分组函数。这意味着该值是从所选的所有行中随机选择的。@jarlh然后我提到的表达式在三小时前就被删除了。你仍然可以在一些答案中找到它。@KIKOSoftware,我理解。对不起打扰你了。
SELECT display, 
       SUM(category = 2 AND (statusCode != -1 AND statusCode != 400  AND statusCode != 401)) apiCount, 
       SUM(category = 1 ) javascriptCount,
       SUM((category = 2 AND (statusCode != -1 AND statusCode != 400  AND statusCode != 401)) OR category = 1) totalCount,
       occurance 
FROM error 
WHERE  `occurance` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
GROUP BY display