0

調査データを保持するテーブルがあります。2つのデータポイントはEthnicityとFlavor_Prefです。Flavour_Prefは、整数1、2、3、4、5を保持します。1 =非常に嫌い、5非常に好き。

 Ethnicity            Flavor_Pref
 African American         3
 Caucasian                2
 Asian                    4
 Hispanic                 1
 African American         3
 Caucasian                4
 Asian                    5
 Hispanic                 2
 African American         4
 Caucasian                1
 Asian                    4
 Hispanic                 2
 African American         3
 Caucasian                2
 Asian                    2
 Hispanic                 1

クエリを実行して、民族グループごとに1つずつ、合計4つの列を取得したいと思います。各グループには、異なる数の応答があります。

これが私が取り組んでいることです:私は100万以上の結果を得ています....私は400の調査しか持っていません。

  select  AA.Flavor_Pref as AA,H.Flavor_Pref as H,C.Flavor_Pref AS C,
  A.Flavor_Pref AS A  from
  (SELECT ETHNICITY,Flavor_Pref FROM FLAVORS WHERE ETHNICITY = 'AFRICAN AMERICAN')AS AA
  CROSS JOIN
  (SELECT ETHNICITY,Flavor_Pref FROM FLAVORS WHERE  ETHNICITY = 'HISPANIC') AS H
  CROSS JOIN 
  (SELECT ETHNICITY,Flavor_Pref FROM FLAVORS WHERE ETHNICITY = 'CAUCASIAN') AS C
  CROSS JOIN 
  (SELECT ETHNICITY,Flavor_Pref FROM FLAVORS WHERE  ETHNICITY = 'ASIAN' ) AS A

私が探しているのは、この場合、ヒスパニック系の結果が少ないため、何も報告されないということです。

   African Americans            Hispanic        Caucasian          Asian
         3                         1                2               4
         3                         2                4               5
         4                         2                1               5
         .                         .                .               .
         .                         .                .               .
         .                         .                .               .
         3                                          2               4
         2                                          1               1  
4

2 に答える 2

1

あなたが探しているのはPIVOT、行を列に入れることです。これを行うための標準的な方法は次のとおりです。すべてのRDBMSで使用できます。

SELECT 
  MAX(CASE WHEN Ethnicity = 'African American' THEN Flavor_Pref END)
     AS 'African Americans',
  MAX(CASE WHEN Ethnicity = 'Hispanic' THEN Flavor_Pref END)
     AS 'Hispanic',
  MAX(CASE WHEN Ethnicity = 'Caucasian' THEN Flavor_Pref END)
     AS 'Caucasian',
  MAX(CASE WHEN Ethnicity = 'Asian' THEN Flavor_Pref END)
     AS 'Asian'
FROM @flavors 
GROUP BY Flavor_Pref

これがライブデモです

于 2012-10-01T13:30:38.847 に答える
1

各民族で最も人気のあるフレーバーが必要です。ランキング関数を使用して、ほとんどのデータベースでこれを行うことができます。

select max(case when ethnicity = 'African American' and seqnum = 1 then flavor_pref end) as AfricanAmerican,
       max(case when ethnicity = 'Hispanic' and seqnum = 1 then flavor_pref end) as Hispanic,
       max(case when ethnicity = 'Caucasian' and seqnum = 1 then flavor_pref end) as Caucasian,
       max(case when ethnicity = 'Asian' and seqnum = 1 then flavor_pref end) as Asian
from (select t.ethnicity, t.flavor_pref, cnt,
             row_number() over (partition by t.enthnicity order by cnt desc) as seqnum
      from (select t.ethnicity, t.flavor_pref, count(*) as cnt
            from t
            group by t.ethnicity, t.flavor_pref
           ) t
     ) ts
于 2012-10-01T13:43:08.903 に答える