所以我有一个我需要分析的错误日志。
在该错误日志中有一些名为
的字段问题是我需要获得不同的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;
这是我正在查看的表格。 Event Error Table
我截断了事件属性,因为IP地址无关紧要。基本上我想让唯一的event_attribute充当主键,并计算连接到该主键的4和5的数量。
使用上面的代码,我得到了这个输出:Event Result Table
感谢您的帮助!
答案 0 :(得分:0)
The query is interpreting UIView *menuView;
- (void)viewDidLoad
{
[super viewDidLoad];
CGFloat height = [UIScreen mainScreen].bounds.size.height;
menuView = [[CustomMenuView alloc]initWithFrame:CGRectMake(0, 60, 135, height)];
[self.view addSubview:menuView];
}
as string, try using ` or double quotes to delimit the field instead. ...and while it is "standard", I tend to shy away from double-quotes because they look like they should be for strings (and in some configurations of MySQL are).
Edit (for clarity): I mean it is literally interpreting 'EVENT_SEVERITY'
as the string "EVENT_SEVERITY", not the underlying value of the field as a string.
答案 1 :(得分:0)
你非常接近。
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
等表达式也会隐式强制它们为整数。
包括COUNT(*)
之类的批量总计通常是一种很好的做法,尤其是在您进行调试时;它们形成了良好的健全性检查,您可以正确处理数据。