0

我有以下 2 张桌子

身份证公里日期
1 22.1 2012-04-15
2 52.1 2012-04-14
3 72.1 2012-03-15
4 54.1 2012-03-14

身份证日期
1 16.4 2012-04-03
2 22.6 2012-04-29
3 45.9 2012-03-2
4 13.1 2012-03-31

从这张表中,我需要按月获得一个费率,我的意思是,公里数除以一个月内的 lt 数。我知道我可以在查询中使用聚合函数按月获得公里的总和,在其他查询中使用 lt 的总和,类似这样。

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

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

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

4

1 回答 1

1

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

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

于 2012-04-18T22:00:12.107 回答