2016-04-15 13 views
0

私は2年間で人口を比較したい人口表を持っています。2年で比較する日付

私のテーブル構造:
ID(自動インクリメント)、タイプ(男性、女性、子供)、人口(1〜10000)、日付私は、クエリの下に2を実行し、1つのテーブル結果に表示したい

Query1を:

SELECT type,count(population) as count_of_year1 
FROM population 
where date between '2013-01-01' and '2013-01-24' 
GROUP BY type 

QUERY2:

SELECT type, count(population) as count_of_year2 
FROM population 
where date between '2014-01-01' and '2014-01-24' 
GROUP BY type 

私はこの結果が必要です:

|タイプ| 1913年の人口| 2014年の人口

どのようにするか?

答えて

0

使用条件カウントを行うにはcase表現:

SELECT type, 
     count(case when date between '2013-01-01' and '2013-01-24' then population end) as count_of_year1, 
     count(case when date between '2014-01-01' and '2014-01-24' then population end) as count_of_year2 
FROM population 
GROUP BY type 

は、必要に応じて物事をスピードアップするために、このwhere句を追加します。集団として

where date between '2013-01-01' and '2013-01-24' 
    or date between '2014-01-01' and '2014-01-24' 
+0

tank you。 2013年に人口の合計を表示する列を追加します。これは可能ですか?ケースの式の中にこの条件を追加する方法 – vahid

+0

あなたの質問をもう一度読んだとき、私はそれに答えました。それともあなたが求めているのですか? – jarlh

0

を1から10000までの値を持つことができ、私は仮定COUNT()ではなくSUM()をここに追加します。

続いてID、TYPE_ID(参照はtype.id)、人口、日付 - ID、タイトル

  • は人口 -

    • population_type:

      私は、別のタイプのテーブルを持っていると思います私はここでJOINを使うほうが好きです:

      SELECT pt.title type, 
            COALESCE(y1.total_population,0) population_2013, 
            COALESCE(y2.total_population,0) population_2014 
           FROM population_type pt 
      LEFT JOIN (
           SELECT type_id, 
             SUM(population) total_population, 
            FROM population 
           WHERE date >= '2013-01-01' 
            AND date < '2013-01-24' + INTERVAL 1 DAY   
           GROUP BY type 
            ) y1 
           ON y1.type_id = pt.id   
      LEFT JOIN (
           SELECT type_id, 
             SUM(population) total_population, 
            FROM population 
           WHERE date >= '2014-01-01' 
            AND date < '2014-01-24' + INTERVAL 1 DAY   
           GROUP BY type 
            ) y2 
           ON y2.type_id = pt.id 
      

      この方法では、毎回必要なものだけを合計しますクエリはモジュール化されています。