简体   繁体   中英

How to get sum of sum in mysql query?

I have sql query for find apiCount and javascriptCount now i want to one count as apiCount + javascriptCount How can i do that please help me.I try to find many solution on google but i can't get exactly solution of my problem.

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

this is my query i want to sum of apiCount and javascriptCount in same query.

Use '+' operator to make it total Or you can combined the both logic to count it

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

OR

SELECT  display , 
SUM(CASE WHEN (category i=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

You can combine the two CASE expressions to get the combined sum:

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

Wrap your original query up in a derived table. Then you can calculate 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

In mysql the simplest you can SUM with the condition, the condition established add one, otherwise didn't add.

You can try this.

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

Hi Please try the following query.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM