簡體   English   中英

選擇distinct列,然后計算與MySQL中該列相關的2列

[英]Select distinct column and then count 2 columns that relate to that column in MySQL

所以我有一個我需要分析的錯誤日志。

在該錯誤日志中,有一些字段被調用

  • EVENT_ATTRIBUTE,顯示收集該信息的設備的名稱。
  • EVENT_SEVERITY顯示1到5之間的數字。在本欄中,我需要找到4和5的數量。

問題是我需要獲得不同的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.

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