2012-04-18 125 views
0

日期我有以下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 

從這個表我需要按月率,我的意思是,數公里除以一個月中的人數。我知道我可以在查詢中使用聚合函數並在其他查詢中得到總和爲公里的總和,例如像這樣。

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

然後我可以手動劃分每個分組月的km/lt。所以問題是,我可以做一個簡單的查詢嗎?我是否必須更改數據庫的結構?

任何幫助,將不勝感激,謝謝。

回答

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

+0

哇,太感謝你了。事實上,我需要一個超級快速的答案 – 2012-04-18 22:21:57