表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/