2012-12-11 72 views
5

Helo, Truy vấn dưới đây trả về số người có cùng tên với giới tính = Nam.Nhóm Sql lồng nhau bởi

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

tương tự, truy vấn dưới đây trả về số người có cùng tên với giới tính = Nữ.

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

bây giờ tôi muốn thực hiện truy vấn tìm ra tên và cho biết giới tính (nam hay nữ) có số lượng lớn hơn. tức là xác suất cao hơn của tên đó trong cơ sở dữ liệu là nam hay nữ?

Trả lời

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; 

Hoặc một đường chuyền duy nhất:

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

thankyou rất nhiều: D bạn giải quyết vấn đề của tôi :) thats greattt: D – ssbb

+0

trong một cơ sở dữ liệu dữ liệu được cập nhật bẩn được đưa ra trong chuỗi và trong khác nhau các định dạng khác nhau ... tôi muốn chuẩn hóa ngày theo định dạng ngày tháng để làm sạch tất cả các cột ngày .... làm thế nào tôi có thể làm điều đó? – ssbb

+0

CHỌN chuỗi con (Student.Student_Name, 1, CHARINDEX ('', Student.Student_Name, 0)), Nam, Nữ, trường hợp khi Nam = Nữ rồi 'Bình đẳng' khi Nam> Nữ rồi 'M' else 'F 'end MostProbablyGender FROM ( select substring (Student.Student_Name, 1, CHARINDEX (' ', Student.Student_Name, 0)), SUM (trường hợp khi Giới tính =' M 'rồi 1 else 0 kết thúc) Nam, SUM (trường hợp khi Giới tính = 'F' thì 1 người khác 0 kết thúc) Nữ từ Học sinh nhóm theo chuỗi con (Student.Student_Name, 1, CHARINDEX ('', Student.Student_Name, 0)) ) X; lỗi Không có tên cột nào được chỉ định cho cột 1 của 'X'. – ssbb