如何使用sql查询计算比率?

san*_*ode 3 mysql sql-server oracle

我有一张如下表:

ID   Name   Department Gender
1    Crib     MA        MALE
2    Lucy     Bsc       FEMALE
3    Phil     Bcom      MALE
4    Ane      MA        FEMALE
Run Code Online (Sandbox Code Playgroud)

我有1000行这样的记录.我想找到所有学生的性别(男性和女性)列的比率.

我需要一个查询来执行此操作.

Fab*_*ion 10

SQL小提琴

MySQL 5.5.32架构设置:

CREATE TABLE table1
    (`ID` int, `Name` varchar(4), `Department` varchar(4), `Gender` varchar(6))
;

INSERT INTO table1
    (`ID`, `Name`, `Department`, `Gender`)
VALUES
    (1, 'Crib', 'MA', 'MALE'),
    (2, 'Lucy', 'Bsc', 'FEMALE'),
    (3, 'Phil', 'Bcom', 'MALE'),
    (4, 'Ane', 'MA', 'FEMALE')
;
Run Code Online (Sandbox Code Playgroud)

查询1:

SELECT sum(case when `Gender` = 'MALE' then 1 else 0 end)/count(*) as male_ratio,
       sum(case when `Gender` = 'FEMALE' then 1 else 0 end)/count(*) as female_ratio
FROM table1
Run Code Online (Sandbox Code Playgroud)

结果:

| MALE_RATIO | FEMALE_RATIO |
|------------|--------------|
|        0.5 |          0.5 |
Run Code Online (Sandbox Code Playgroud)


S. *_*rth 5

尝试这样的事情

select sum(case when gender = 'MALE' then 1 else 0 end) / count(*) * 100 as perc_male,
sum(case when gender = 'FEMALE' then 1 else 0 end) / count(*) * 100 as perc_female
from students
Run Code Online (Sandbox Code Playgroud)


Aar*_*ett 1

这应该给你实际的比率,并且应该在 MySQL 和 SQL Server 中很少或没有修改的情况下工作。您可能需要稍微修改一下强制转换语句 - 我的 MySQL 很生锈,我认为它的处理方式可能略有不同。

SELECT 
    (CAST((SELECT COUNT(*) FROM tblName WHERE Gender='MALE') AS FLOAT) / 
     CAST((SELECT COUNT(*) FROM tblName WHERE Gender='FEMALE') AS FLOAT)) 
    AS ratioMaleFemale;
Run Code Online (Sandbox Code Playgroud)