2012-12-11 15 views
5

Helo、 以下のクエリは、gender = Maleの同じ名前を持つ人の数を返します。Sqlネストされたグループ

select lookup_name.firstname,count(lookup_name.firstname) 
from lookup_name 
where gender='M' 
group by firstname 

同様に、以下のクエリはgender = Femaleの同名の人数を返します。

select lookup_name.firstname,count(lookup_name.firstname) 
from lookup_name 
where gender='F' 
group by firstname 

私は、名前を見つけて性別(男性か女性か)をより多くカウントするクエリを作成したいと考えています。データベース内のその名前の可能性が高いのは男性か女性かということですか?

答えて

4
SELECT firstname, Male, Female, 
     case when Male=Female then 'indeterminate' 
      when Male>Female then 'probably male' 
      else 'probably female' end MostProbablySex 
FROM (
    select firstname, 
      SUM(case when gender='M' then 1 else 0 end) Male, 
      SUM(case when gender='F' then 1 else 0 end) Female 
    from lookup_name 
    group by firstname 
) X; 

または単一パス:

select firstname, 
     CASE SIGN(2.0 * SUM(case when gender='M' then 1 else 0 end)/COUNT(*) - 1) 
     WHEN -1 then 'probably female' 
     WHEN 0 then 'indeterminate' 
     WHEN 1 then 'probably male' 
     END 
from lookup_name 
group by firstname; 
+1

そんなにありがとう:Dあなたはgreattt厥:)私の問題を解決:データベースでD – ssbb

+0

データが汚い日付では、文字列中に、別のに与えられています異なるフォーマット...私はすべての日付の列をきれいにするようにSQLデータ形式で日付を標準化したいと思います....どうすればいいですか? – ssbb

+0

SELECTサブストリング(Student.Student_Name、1、CHARINDEX( ''、Student.Student_Name、0))、男性、女性、 ケース男性=女性の場合 'Equal' 男性>女性の場合 'M' else 'FSUM(ケースがGender = 'M'、次に1 else 0 end)男性、 合計( )SUM(大文字と小文字が区別されている場合は大文字、小文字は区別されません。ケースGender = 'F'、次に1 else 0 end)女性 サブストリング(Student.Student_Name、1、CHARINDEX( ''、Student.Student_Name、0))のグループ )X; エラー 'X'の列1に列名が指定されていません。 – ssbb

関連する問題