我正在为一个班级解决这个SQL问题.

请计算一下男生的人数和人数 女性学生的比例.学生是指已注册的人. 唱片.

预期结果应该如下所示

Example Result

然而,我一直无法得到以这种格式返回的结果,在这一点上我被困在这里

enter image description here

利用这个代码

SELECT 
COUNT(Distinct enrollment.personID) as male
FROM dbo.enrollment
RIGHT JOIN dbo.person ON person.personID=enrollment.personID
WHERE person.gender='male'
UNION
SELECT
COUNT(Distinct enrollment.personID) as female
FROM dbo.enrollment
RIGHT JOIN dbo.person ON person.personID=enrollment.personID
WHERE person.gender='female'; 

任何帮助我指向正确格式的人都将不胜感激.

推荐答案

实际上使用UNION运行两个单独的查询来获得malefemale计数. 要获得所需内容,您必须在一个查询中使用conditional aggregationCASE语句.这可以更高效,并减少对两个单独查询的需要:

SELECT
  COUNT(DISTINCT CASE WHEN person.gender = 'male' THEN enrollment.personID END) as male,
  COUNT(DISTINCT CASE WHEN person.gender = 'female' THEN enrollment.personID END) as female
FROM dbo.enrollment
RIGHT JOIN dbo.person ON person.personID = enrollment.personID;

subquery解决这个问题的另一个更易读、更简单的方法是:

SELECT SUM(p.gender = 'male') AS male, SUM(p.gender = 'female') AS female
FROM person AS p
WHERE p.personID IN (SELECT personID FROM enrollment);

Mysql相关问答推荐

在Join的ON分句中使用SUM()

MySQL嵌套的内连接使查询变得很慢-解决方案?

插入时发生日期时间字段溢出错误

MySQL工作台的编码问题

我是否需要在 N+1 列上建立索引,才能有效地在 N 列上执行 SELECT,并按其他列排序?

Select 同一张表中的结果数?

SQL - 基本的内部连接查询

使用 Having 表达式连接多个表

获取 TEXT 类型行的百分比

有人可以帮我用 R 编程解决这个问题吗?

如果我创建一个没有主键的表然后添加一个主键,主键是聚集索引吗?

在 PHP 中获取 MySQL 列的总和

使用 mysql 处理非常大的数据

Ubuntu 中的 MySQL JDBC jar 文件在哪里?

使用 Docker 我收到错误:SQLSTATE[HY000] [2002] 没有这样的文件或目录

我可以在 PHP 中使用 PDO 创建数据库吗?

使用 MySql,我可以对列进行排序但最后有 0 吗?

MySQL:唯一字段需要是索引吗?

匹配 IN 子句中的所有值

带有 WHERE 子句的 MySql 内连接