2012-04-18 9 views
0

の日付を持つ2つのテーブル内の機能私は私が意味する、私は月ごとに料金を取得する必要があります。この表から、以下の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を1ヶ月のltで割ったものです。私は、クエリの集計関数を使用して月ごとのkmの合計を得ることができ、他のクエリでltの合計、このようなものを得ることができることを知っています。

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

次に、グループ化された月ごとに手動でkm/ltを分割することができました。だから問題は、私は簡単なクエリでそれを行うことができますか?私は自分のデータベースの構造を変更する必要がありますか?

ありがとうございます、ありがとうございます。

答えて

1

月/年単位でテーブルデータを結合するだけで済みます。 ltが0であるか、または1ヶ月間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によってグループ化することに注意してください

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

デモ:http://www.sqlfiddle.com/#!2/c2942/6

+0

うわー、ありがとうございました。確かに私は超高速な答えで必要なもの –