【发布时间】:2021-12-31 04:53:56
【问题描述】:
一张表grade 看起来像这样
| course | year | pass |
|---|---|---|
| English | 2019 | Yes |
| Math | 2020 | Yes |
| Math | 2020 | No |
| Chemistry | 2021 | No |
它显示学生在每个日历年中所有课程的成绩。一门课程每年可以参加多次。 pass的数据类型是bool。现在我想知道在 2020 年和 2021 年每年至少通过一次的所有课程。
我的查询是
SELECT course
FROM grade
WHERE year IN (2020, 2021)
GROUP BY course, year
HAVING SUM(pass) > 0;
但它显示课程满足 2020 年或 2021 年。如何仅显示课程满足 2020 年和 2021 年?
【问题讨论】:
-
你用的是mysql、sql server还是postgresql?您标记了所有这些。
-
我觉得没关系,也可以看成伪sql。
-
这确实很重要。这个问题很容易用条件聚合来回答,但是 Postgres 等支持
FILTER,SQL Server 不支持。 SQL Server 也不支持bool列,仅支持bit
标签: sql group-by language-agnostic