2012-12-11 3 views
5

Helo, 아래 쿼리는 gender = Male 인 동일한 이름을 가진 사람들의 수를 반환합니다.Sql 중첩 그룹 by

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

고맙다는 너무 많은 : 당신이 greattt 그게 내 문제 : 해결 D : 데이터베이스에 D – ssbb

+0

을 데이터 더러운 날짜 문자열에서 다른에 제시되어있다 다른 형식 ... 나는 모든 날짜 열을 정리할 수 있도록 SQL 날짜 형식으로 날짜를 표준화하고 싶습니다 .... 어떻게 할 수 있습니까? – ssbb

+0

SELECT 하위 문자열 (Student.Student_Name, 1, CHARINDEX ('', Student.Student_Name, 0)), 남성, 여성, 사례 남성 = 여성의 경우 '평등' 남성> 여성의 경우 'M' else 'F끝 부분 문자열 (Student.Student_Name, 1, CHARINDEX ('', Student.Student_Name, 0)), SUM (성별 = '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