【问题标题】:Sql Nested group bySql 嵌套分组依据
【发布时间】:2012-12-11 10:07:14
【问题描述】:

以下查询返回多个同名且性别 = 男的人。

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

类似地,下面的查询返回许多同名的人,性别 = 女性。

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

我需要编写一个查询来找出姓名并告诉性别(无论是男性还是女性),计数更大。即数据库中该名称的较高概率是男性还是女性?

【问题讨论】:

    标签: sql group-by


    【解决方案1】:
    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;
    

    【讨论】:

    • 非常感谢 :D 你解决了我的问题 :) 太好了 :D
    • 在数据库中,数据是脏日期以字符串和不同的格式给出...我想以 sql 日期格式标准化日期,以便清理所有日期列... .我该怎么做?
    • SELECT substring(Student.Student_Name, 1,CHARINDEX(' ',Student.Student_Name,0)),男性,女性,男性=女性时的情况,然后“相等”,男性>女性,然后是“M” ' else 'F' end MostProbablyGender FROM ( select substring (Student.Student_Name, 1,CHARINDEX(' ',Student.Student_Name,0)), SUM(case when Gender='M' then 1 else 0 end) Male, SUM( case 当 Gender='F' then 1 else 0 end) 来自 Student 组的女性子字符串 (Student.Student_Name, 1,CHARINDEX(' ',Student.Student_Name,0)) ) X;错误没有为“X”的第 1 列指定列名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多