[英]Select distinct column and then count 2 columns that relate to that column in MySQL
所以我有一個我需要分析的錯誤日志。
在該錯誤日志中,有一些字段被調用
問題是我需要獲得不同的EVENT_ATTRIBUTES,然后計算與該特定EVENT_ATTRIBUTE相關的所有4和5並輸出計數。
基本上傳感器(event_attribute)檢測不同的錯誤。 我需要分析每個傳感器中有多少4個和5個,以便我可以分析它們。
我在使用不同的傳感器並將它們連接到特定傳感器時遇到問題。 到目前為止我已經嘗試了這個但它只返回4和5的相同數字,所以我不認為我正確地做到了。
SELECT DISTINCT LEFT(EVENT_ATTRIBUTE, locate('(', EVENT_ATTRIBUTE, 1)-1) AS
SensorName,
COUNT(CASE WHEN 'EVENT_SEVERITY' <>5 THEN 1 END) AS ERROR5,
COUNT(CASE WHEN 'EVENT_SEVERITY' <>4 THEN 1 END) AS ERROR4
FROM nodeapp.disc_event
WHERE EVENT_SEVERITY IN (5,4)
Group BY SensorName;
這是我正在看的表。 事件錯誤表
我截斷了事件屬性,因為IP地址無關緊要。 基本上我想讓唯一的event_attribute充當主鍵,並計算連接到該主鍵的4和5的數量。
使用上面的代碼,我得到了這個輸出: 事件結果表
謝謝你的幫助!
查詢將'EVENT_SEVERITY'
解釋為字符串,嘗試使用`或雙引號來分隔字段。 ...雖然它是“標准的”,但我傾向於回避雙引號,因為它們看起來應該是字符串(在MySQL的某些配置中)。
編輯(為清晰起見):我的意思是它將'EVENT_SEVERITY'
字面解釋為字符串“EVENT_SEVERITY”,而不是字段作為字符串的基礎值。
你很近。
當您進行分組時, DISTINCT
是不必要的。
你想要SUM()
。 COUNT()
只計算非空的所有內容。 您可以利用布爾表達式求值為1或0的hack。
SELECT LEFT(EVENT_ATTRIBUTE, LOCATE('(', EVENT_ATTRIBUTE, 1)-1) AS SensorName,
SUM(EVENT_SEVERITY = 5) ERROR_5,
SUM(EVENT_SEVERITY = 4) ERROR_4,
COUNT(*) ALL_ERRORS
FROM nodeapp.disc_event
GROUP BY LEFT(EVENT_ATTRIBUTE, LOCATE('(', EVENT_ATTRIBUTE, 1)-1);
即使EVENT_SEVERITY
值在DBMS中存儲為字符串, EVENT_SEVERITY = 4
等表達式EVENT_SEVERITY = 4
它們強制轉換為整數。
通常很好的做法是包括COUNT(*)
等批處理總計,尤其是在調試時; 它們形成了良好的健全性檢查,您正確處理數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.