2个表中的聚合函数,具有相同的日期

时间:2012-04-18 21:47:10

标签: mysql aggregate-functions

我有以下2个表

id   km    date
1    22.1  2012-04-15
2    52.1  2012-04-14
3    72.1  2012-03-15
4    54.1  2012-03-14

id   lt    date
1    16.4  2012-04-03
2    22.6  2012-04-29
3    45.9  2012-03-2
4    13.1  2012-03-31

从这个表中我需要按月获得一个比率,我的意思是,km的数量除以一个月的lt数。我知道我可以在查询中使用聚合函数逐月得到km的总和,在其他查询中得到lt的总和,就像这样。

SELECT SUM(km) FROM kilometers GROUP BY MONTH(date)
SELECT SUM(lt) FROM gasoline GROUP BY MONTH(date)

然后我可以手动划分每个分组月份的km / lt。所以问题是,我可以在一个简单的查询上做到这一点吗?我是否必须更改数据库的结构?

任何帮助都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:1)

您应该能够按月/年将表格数据加在一起。您只需处理lt为0或一个月为null的情况。请注意,您还希望按年份分组,以便适当地处理多年数据:

SELECT k.year, k.month, k.km / g.lt
FROM (SELECT YEAR(date) as year, MONTH(date) as month, SUM(km) as km
      FROM kilometers GROUP BY YEAR(date), MONTH(date)) k
JOIN (SELECT YEAR(date) as year, MONTH(date) as month, SUM(lt) as lt
      FROM gasoline GROUP BY YEAR(date), MONTH(date)) g
  ON k.month = g.month AND k.year = g.year

示例输出:

YEAR  MONTH  K.KM / G.LT
----  -----  --------------
2012  3      2.138982929974
2012  4      1.90256407322

演示:http://www.sqlfiddle.com/#!2/c2942/6