2012-04-14 11 views
0

ことで、私は私のユーザーのためのオンライン調査を持っている、とするたびに、ユーザーがアンケートに答えて、私はこのような「survey_stats」テーブルにその詳細をキャプチャします - つまりのMySQL - グループの複数の行

| id  | user_id | survey_id | key   | value | 
|---------|---------|-----------|--------------|---------| 
|  1 |  10 |  99 | gender  | male | 
|  2 |  10 |  99 | age   | 32  | 
|  3 |  10 |  99 | relationship | married | 
|  4 |  11 |  99 | gender  | female | 
|  5 |  11 |  99 | age   | 27  | 
|  6 |  11 |  99 | relationship | single | 

をユーザーがアンケートに回答すると、ユーザーの属性(性別、年齢、関係)を3行(ユーザーの個別属性ごとに1行)で取得します。私たちがこのようにしている理由は、将来、ユーザー属性を拡張したい場合、survey_statsテーブル構造を変更するのではなく、調査ごとにレコードを追加するだけです。私はこのようなレポートを生成するためにSQLを構築したいと思います

| age_group | male | female | 
|-----------|-------|---------| 
| 13 - 17 | 10 |  7 | 
| 18 - 24 | 25 |  10 | 
| 25 - 34 | 30 |  11 | 

はそうするように、単一のSQL文を書く方法私を見るためにいくつかの助けを本当に感謝します。

FYI - 私はMySQLを使用しています。このプロジェクトは、Ruby on Railsアプリケーションです。

多くのありがとうございます。

答えて

2
select 
     case when YT2.age between 13 and 17 then "13 - 17" 
      when YT2.age bewteen 18 and 24 then "18 - 24" 
      when YT2.age between 25 and 35 then "25 - 34" 
      else "35 and over" end as AgeGroup, 
     Sum(if(YT1.value = "male", 1, 0)) as MaleFlag, 
     SUM(if(YT1.value = "female", 1, 0)) as FemaleFlag 
    from 
     YourTable YT1 
     JOIN YourTable YT2 
      ON YT1.user_id = YT2.user_ID 
      AND YT1.survey_id = YT2.survey_id 
      AND YT2.key = "age" 
    where 
     YT1.Key = "gender" 
    group by 
     AgeGroup 
+0

ありがとう、@ DRapp! – keewooi