用mysql写一个能够统计学生成绩为null和不为null或者0的人数,且将两种人数相减
时间: 2024-03-27 20:39:53 浏览: 43
可以使用如下的SQL语句来实现该功能:
```sql
SELECT
SUM(CASE WHEN score IS NULL OR score = 0 THEN 1 ELSE 0 END) - SUM(CASE WHEN score IS NOT NULL AND score != 0 THEN 1 ELSE 0 END) AS difference
FROM
student_scores;
```
这个SQL语句会从 `student_scores` 表中进行查询,使用 `CASE WHEN` 语句来判断每个学生成绩的情况,并将成绩为 `NULL` 或者为 `0` 的人数与成绩不为 `NULL` 且不为 `0` 的人数相减,最后将差值作为结果返回。
相关问题
用mysql写一个能够统计学生成绩为null和不为null或者0的人数,同时将两种人数相减
可以使用如下的SQL语句来实现该功能:
```sql
SELECT
COUNT(CASE WHEN score IS NULL OR score = 0 THEN 1 ELSE NULL END) - COUNT(CASE WHEN score IS NOT NULL AND score != 0 THEN 1 ELSE NULL END) AS difference
FROM
student_scores;
```
这个SQL语句会从 `student_scores` 表中进行查询,使用 `CASE WHEN` 语句来判断每个学生成绩的情况,并将成绩为 `NULL` 或者为 `0` 的人数与成绩不为 `NULL` 且不为 `0` 的人数相减,最后将差值作为结果返回。注意在 `CASE WHEN` 语句中使用 `NULL` 关键字来跳过不符合条件的记录,而不是使用 `0` 或 `1`。
mysql两个结果集相减
在 MySQL 中,两个结果集相减可以使用 `NOT IN` 或 `LEFT JOIN` 的方式来实现。
1. 使用 `NOT IN`:
例如,我们有两个表 `table1` 和 `table2`,我们想要从 `table1` 中减去 `table2` 中存在的记录:
```
SELECT * FROM table1
WHERE id NOT IN (SELECT id FROM table2);
```
上面的查询语句会返回 `table1` 中存在,但是在 `table2` 中不存在的记录。
2. 使用 `LEFT JOIN`:
另外一种方法是使用 `LEFT JOIN` 来实现两个结果集相减。例如,我们有两个表 `table1` 和 `table2`,我们想要从 `table1` 中减去 `table2` 中存在的记录:
```
SELECT table1.* FROM table1
LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.id IS NULL;
```
上面的查询语句会返回 `table1` 中存在,但是在 `table2` 中不存在的记录。这是通过将 `table1` 和 `table2` 进行 `LEFT JOIN`,然后在 `WHERE` 子句中过滤掉 `table2` 中存在的记录来实现的。
阅读全文