0
我正在处理基本上看起来像这样的数据。更高效的查询来计算组范围内的值
表:processed_data
sensor_id, reading, time_stamp
1,0.1,1234567890
1,0.3,1234567891
1,0.9,1234567892
1,0.32,1234567893
...
我想要做的就是进行查询,可以使一个遍历数据,并指望有多少读数是在每个类别。简单的例子,
类别(0-0.5,0.5-0.7,0.7-1)(我实际上计划将它们分成10个类别,但增量为0.1)。
这基本上是我想要的东西,即使它是不是有效的SQL:
select count(reading between 0 and 0.5), count(reading between 0.5 and 0.7), count(reading between 0.7 and 1) from processed_data;
我能想到的,虽然这样做的唯一方法,就是做一个O * N的操作,而不是1个时间循环。
select count(*) as low from processed_data where reading between 0 and 0.5
union
select count(*) as med from processed_data where reading between 0.5 and 0.7
union
select count(*) as high from processed_data where reading between 0.7 and 1;
我可能只是诉诸做在PHP中处理和一次扫描的数据,但我宁愿SQL做到这一点,如果能足够聪明。
在MySQL中,“是不是有效的SQL”实际上几乎工作...因为COUNT递增每个非null值(即0和1),你想要使用SUM()聚合来代替COUNT()。否则,该查询将在MySQL中起作用。我希望相同的查询可以在sqllite中工作。在MySQL中,“读取0和0.5之间”这个表达式对于更符合可移植性和ANSI标准的应用来说是简短的:“'当读取0和0.5之间的值时读取0,然后读取0.5,然后读取0和0.5之间的值时, ”。 – spencer7593
哦,有趣。实际上,我正在研究如何将案例用于我正在做的更复杂的版本。我认为'案例'可能是我真正的答案。 –