我有以下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。所以问题是,我可以在一个简单的查询上做到这一点吗?我是否必须更改数据库的结构?
任何帮助都将不胜感激,谢谢。
答案 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