2012-12-11 4 views
5

Helo, La requête ci-dessous retourne le nombre de personnes ayant le même prénom que gender = Male.Sql Groupe imbriqué par

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

De même, la requête ci-dessous renvoie le nombre de personnes ayant le même nom avec gender = Female.

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

maintenant je veux faire une requête qui trouve le nom et dire le sexe (homme ou femme) avec une plus grande nombre. Est-ce que la plus grande probabilité de ce nom dans la base de données est d'être un homme ou une femme?

Répondre

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; 

Ou une seule passe:

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

Merci beaucoup: D vous avez résolu mon problème :) des thats greattt: D – ssbb

+0

dans une base de données les données sont la date sale est donnée dans la chaîne et dans différents différents formats ... je veux normaliser la date au format de date de sql afin de nettoyer toute la colonne de date .... comment puis-je le faire? – ssbb

+0

SELECT sous-chaîne (Student.Student_Name, 1, CHARINDEX ('', Student.Student_Name, 0)), Homme, Femme, cas où Homme = Femme puis 'Egal' lorsque Homme> Femme puis 'M' sinon 'F 'fin MostProbablyGender DE ( sélectionnez sous-chaîne (Student.Student_Name, 1, CHARINDEX (' ', Student.Student_Name, 0)), SUM (cas où Sexe =' M 'puis 1 sinon 0 fin) Masculin, SUM (cas où Gender = 'F' puis 1 sinon 0 fin) de Student groupe par sous-chaîne (Student.Student_Name, 1, CHARINDEX ('', Student.Student_Name, 0)) ) X; error Aucun nom de colonne n'a été spécifié pour la colonne 1 de 'X'. – ssbb