SQL计算列之间的差异

时间:2014-05-23 12:06:31

标签: mysql sql calculated-columns

我在SQL上有点新手,我真的不明白该怎么做,所以任何帮助都非常感谢。我的桌子上摆满了不同读者的读数,其中有500.000,所以我不能手工完成。

我收到的表没有区别。我设法计算了它,但那里有一点问题......

看起来有点像这样:

meter_id |    date    | reading | difference
   1     | 01-01-2013 |   205   |     0
   1     | 02-01-2013 |   210   |     5
   1     | 03-01-2013 |   213   |     3
  ...    |     ...    |   ...   |    ...
   1     | 31-12-2013 |   2451  |     4
   2     | 01-01-2013 |   8543  |    6092
   2     | 02-01-2013 |   8548  |     5

meter_id,日期是主键。每个meter_id都与一个日期相结合,这是唯一的

如果最后一列包含不同的meter_id,我怎样才能确定我没有计算出差异?

我想做一些像这样的查询:

SELECT AVG(difference), meter_id FROM table GROUP BY meter_id

方法的完全改变也很好,我只想得到每米的平均差异。

之前有人发布了一个有效的查询,但遗憾地删除了回复。如果你可以重新发布它? :)

2 个答案:

答案 0 :(得分:0)

有关

  

我只想获得每米的平均差异。

你的查询非常好。我认为你的差异计算有问题。 meter_id = 2,6092的第一个值是从仪表1的最后读数与从仪表2读取的第一个读数的差值,我觉得这没有意义。如果我没有弄错的话,差异值是当前的读数 - 前一天读数。因此,您应该将每个仪表的第一个读数的差值设置为0。 然后

SELECT AVG(difference), meter_id FROM table GROUP BY meter_id

会做你期望的事。

答案 1 :(得分:0)

如果您只想要平均差异,可以使用以下查询:

SELECT
    meter_id,
    MAX(reading) - MIN(reading) / COUNT(*) average_difference
FROM table
GROUP BY meter_id
ORDER BY meter_id;

它的工作原理是给定的meter_id的总差异应该等于MAX(reading) - MIN(reading)