基于值MYSQL的多重计数
我有一个包含以下列和示例数据的表 (该数据是查询的输出,因此我必须在FROM()语句中使用该查询) 我需要根据时间对数据进行分组,所以我的输出应该如下所示基于值MYSQL的多重计数,mysql,sql,Mysql,Sql,我有一个包含以下列和示例数据的表 (该数据是查询的输出,因此我必须在FROM()语句中使用该查询) 我需要根据时间对数据进行分组,所以我的输出应该如下所示 AlarmType1 | AlarmType2 |AlarmType3| AlarmTime -------------------------------- 71 | 48 | 10 | 2013-05-09 12:00:00 31 | 30 | 4
AlarmType1 | AlarmType2 |AlarmType3| AlarmTime
--------------------------------
71 | 48 | 10 | 2013-05-09 12:00:00
31 | 30 | 4 | 2013-05-09 13:00:00
4 | 0 | 5 | 2013-05-09 14:00:00
我试过这个问题
SELECT
SUM(IF (AlarmType = '1',1,0)) as AlarmType1,
SUM(IF (AlarmType = '2',1,0)) as AlarmType2,
SUM(IF (AlarmType = '3',1,0)) as AlarmType3,
AlarmHour
FROM 'Table1'
GROUP BY Time
但这不起作用,因为我的查询中缺少Count,必须在我的查询中调整Count您的
表1
您的子查询对吗?好吧,它必须有它的别名,所以它会是这样的
SELECT
SUM(IF (AlarmType = '1',1,0)) as AlarmType1,
SUM(IF (AlarmType = '2',1,0)) as AlarmType2,
SUM(IF (AlarmType = '3',1,0)) as AlarmType3,
AlarmHour
FROM (subquery giving table1) as subTable
GROUP BY subtable.Time
编辑:
至于求和,为什么不使用multiplegroup by
?例如,按类型、时间分组,并显示每个组的类型,类型选择类型、时间、总和(计数).
好的,我现在明白了,你想达到什么目的。如果要“添加列”,则必须使用联接
。因此,为您需要的每个列(每个AlarmType count)创建一个查询,并将它们连接到commond值上,该值为报警时间。您需要的是总和(count),而不是总和(1):
SELECT SUM(IF (AlarmType = '1',1,0)) as AlarmType1,
SUM(IF (AlarmType = '2',1,0)) as AlarmType2,
SUM(IF (AlarmType = '3',1,0)) as AlarmType3,
AlarmHour
FROM (your query) as t group by t.Time
我发现一个错误,我没有在查询中使用计数。但是有什么办法吗?我昨天尝试过这种方法,它只显示特定日期的id是否存在,我的意思是只有1和0,而不是报警计数,我发现我在查询中没有使用我的计数,所以必须调整查询中的计数我没有分析你的查询,刚才回答了如何处理您报告的错误。如果我只是按时间分组,ID信息将丢失,我对mysql不太了解,因此我可能错误地低估了您的编辑。我可以选择在我的应用程序中筛选我的记录,但如果我以所需格式获取数据会更好对不起,您所说的“信息将丢失”是什么意思?是的,计数丢失并调整,这起作用了。我对mysql一无所知。
SELECT SUM(IF (AlarmType = '1',1,0)) as AlarmType1,
SUM(IF (AlarmType = '2',1,0)) as AlarmType2,
SUM(IF (AlarmType = '3',1,0)) as AlarmType3,
AlarmHour
FROM (your query) as t group by t.Time
SELECT
SUM(IF (AlarmType = '1',Count,0)) as AlarmType1,
SUM(IF (AlarmType = '2',Count,0)) as AlarmType2,
SUM(IF (AlarmType = '3',Count,0)) as AlarmType3,
AlarmHour
FROM 'Table1'
GROUP BY Time