Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于值MYSQL的多重计数_Mysql_Sql - Fatal编程技术网

基于值MYSQL的多重计数

基于值MYSQL的多重计数,mysql,sql,Mysql,Sql,我有一个包含以下列和示例数据的表 (该数据是查询的输出,因此我必须在FROM()语句中使用该查询) 我需要根据时间对数据进行分组,所以我的输出应该如下所示 AlarmType1 | AlarmType2 |AlarmType3| AlarmTime -------------------------------- 71 | 48 | 10 | 2013-05-09 12:00:00 31 | 30 | 4

我有一个包含以下列和示例数据的表

(该数据是查询的输出,因此我必须在FROM()语句中使用该查询)

我需要根据时间对数据进行分组,所以我的输出应该如下所示

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
编辑: 至于求和,为什么不使用multiple
group 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