结合两个和的结果?

时间:2016-08-25 17:41:06

标签: mysql sql

我正在尝试查看防病毒事件,这些事件将在24小时内显示AV和防火墙的事件数。基本上我试图在不同条件下对同一列进行求和。我已尝试在SUM函数中使用CASE WHEN语句,但它不会返回任何结果。

SELECT 
        events.arc_sourceHostName,
        SUM(CASE WHEN events.arc_deviceEventClassId="fw" THEN events.arc_baseEventCount ELSE 0 END) AS "FWCount",
        SUM(CASE WHEN events.arc_deviceEventClassId="av" THEN events.arc_baseEventCount ELSE 0 END) AS "AVCount"

FROM    events

WHERE
        events.arc_deviceVendor = "BitDefender"
        AND
        (events.arc_deviceEventClassId="fw"
        OR
        events.arc_deviceEventClassId="av")


GROUP BY
        events.arc_sourceHostName

ORDER BY FWCount DESC

其他细节

希望看到主机名后跟AV事件的数量,然后是防火墙事件的数量。

Hostname   AVCount   FWCount
Host1      5         4
Host2      3         5

1 个答案:

答案 0 :(得分:0)

此查询是否符合您的要求?

SELECT e.arc_sourceHostName,
       SUM(CASE WHEN e.arc_deviceEventClassId = 'fw' THEN e.arc_baseEventCount ELSE 0 END) AS FWCount,
       SUM(CASE WHEN e.arc_deviceEventClassId = 'av' THEN e.arc_baseEventCount ELSE 0 END) AS AVCount
FROM events e
WHERE e.arc_deviceVendor = 'BitDefender' AND
      e.deviceEventClassId IN ('fw', 'av')
GROUP BY e.arc_sourceHostName
ORDER BY FWCount DESC;

如果这不起作用,那么没有行可能符合WHERE条件。