sql - 选择计数 = 1 的位置

标签 sql sql-server subquery

LESSON具有字段LessonDate、MemberId(除其他字段外,但只有这两个相关)

英语:给我一份只上过一门课的学生上这门课的日期列表。

我尝试过很多事情。这是我的最新尝试:

SELECT LessonDate 
FROM LESSON 
WHERE (SELECT COUNT(MemberId) GROUP BY (MemberId)) = 1

只是不断返回 SQL 错误。显然,语法和逻辑都是错误的。

最佳答案

这个查询乍一看可能有点违反直觉。您需要按 MemberId 分组以获取只参加一门课的学生:

select max(l.LessonDate) as LessonDate
from Lesson l
group by l.MemberId
having count(*) = 1;

因为学生只有一个类,所以 max(l.LessonDate) 就是该日期。因此,这满足了您的要求:它获取只参加了一个类的成员(member)的所有日期。

你们的思路也很接近。这是我认为您正在寻找的查询:

SELECT LessonDate 
FROM LESSON 
WHERE MemberId in (SELECT l2.MemberId
                   FROM Lesson l2
                   GROUP BY l2.MemberId
                   HAVING COUNT(*) = 1
                  );

如果您想要获取具有 2 或 3 行的成员的日期,则此方法更具通用性。

关于sql - 选择计数 = 1 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22502932/

相关文章:

MySQL UPDATE 使用 JOIN 到子查询

sql - 如何在sql server数据库中查找常量的用法

MySQL 复杂子查询公式

mysql - 子查询在 HAVING 子句中返回多行

sql - 根据特定值从sql表中检索行

mysql - 以下 SQL 查询是否调用整个表扫描?

php - MySQL选择表中特定id的两个时间戳列之间的平均时间差

mysql - 使用对话框的嵌入式 SQL INSERT

sql - 测试时我想在变量中插入多个值

mysql - 如何为 MySQL 中的字段或列设置别名?