簡體   English   中英

如何在mysql查詢中獲取總和?

[英]How to get sum of sum in mysql query?

我現在要查找apiCount和javascriptCount的SQL查詢我想一個計數為apiCount + javascriptCount我該怎么做請幫助我。我嘗試在Google上找到許多解決方案,但我無法完全解決我的問題。

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 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

您可以組合兩個CASE表達式來獲得組合的總和:

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中,最簡單的方法是可以與條件SUM ,條件成立時加一個,否則不加。

你可以試試看

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

您好,請嘗試以下查詢。

 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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM