2012-12-11 18 views
5

Helo, La query seguente restituisce il numero di persone che hanno lo stesso nome con sesso = Maschio.Sql Gruppo annidato per

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

analogamente, la query seguente restituisce il numero di persone che hanno lo stesso nome con sesso = Femmina.

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

ora voglio fare una query, che viene a sapere il nome e dire al genere (maschio o femmina) con maggiore conteggio. la probabilità più alta di quel nome nel database è di essere maschio o femmina?

risposta

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; 

O un unico passaggio:

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

grazie tanto: D hai risolto il mio problema :) questo è greattt: D – ssbb

+0

in una base di dati i dati sono è dato data sporco in corda e in diversi diversi formati ... voglio standardizzare la data in formato data sql in modo da pulire tutta la colonna della data ... come posso farlo? – ssbb

+0

Sottostringa SELECT (Student.Student_Name, 1, CHARINDEX ('', Student.Student_Name, 0)), Maschio, Femmina, caso in cui Maschio = Femmina quindi 'Uguale' se Maschio> Femmina quindi 'M' else 'F 'end MostProbablyGender FROM ( seleziona sottostringa (Student.Student_Name, 1, CHARINDEX (' ', Student.Student_Name, 0)), SOMMA (caso in cui Sesso =' M 'quindi 1 altro 0 fine) Maschio, SOMMA (caso in cui Gender = 'F' quindi 1 altro 0 fine) Donna da Student gruppo per sottostringa (Student.Student_Name, 1, CHARINDEX ('', Student.Student_Name, 0)) ) X; errore Non è stato specificato il nome della colonna per la colonna 1 di "X". – ssbb