Sql 选择COUNT=1的位置
表Sql 选择COUNT=1的位置,sql,sql-server,subquery,Sql,Sql Server,Subquery,表LESSON包含字段LessonDate、MemberId(除其他字段外,只有这两个字段相关) 英语:给我一张只上过一节课的学生上那节课的日期清单 我试过很多东西。以下是我的最新尝试: SELECT LessonDate FROM LESSON WHERE (SELECT COUNT(MemberId) GROUP BY (MemberId)) = 1 只是不断返回SQL错误。显然,语法和逻辑都不正确 select count(LessonDate) as Lesson_date,Mem
LESSON
包含字段LessonDate、MemberId
(除其他字段外,只有这两个字段相关)
英语:给我一张只上过一节课的学生上那节课的日期清单
我试过很多东西。以下是我的最新尝试:
SELECT LessonDate
FROM LESSON
WHERE (SELECT COUNT(MemberId) GROUP BY (MemberId)) = 1
只是不断返回SQL错误。显然,语法和逻辑都不正确
select count(LessonDate) as Lesson_date,MemberId from Lesson group by MemberId having Lesson_Date=1
或
您需要查看
选择。。。从…起分组方式。。。拥有
通过搜索分组方式
可以在线获取大量文档,例如
以下SQL按MemberId
分组,我认为这是错误的,因为您要计算成员id的数量
SELECT
LessonDate
, MemberId
, COUNT(*) AS Lesson_Count
FROM
Lesson
GROUP BY
LessonDate
, MemberId
HAVING
COUNT(*) = 1
上述查询将为您提供“日期”、“成员”列表,以及该“成员”在该日期上的课程数量。我认为您不需要将聚合函数(COUNT(*)作为select语句的一部分,但它通常“很高兴拥有”可以让您确信您的结果与预期一致
您的查询实际上失败了,因为子查询没有FROM
语句,但上面的做法更好:
SELECT LessonDate
FROM LESSON
WHERE (SELECT COUNT(MemberId) FROM Lesson GROUP BY (MemberId)) = 1
起初,这个查询似乎有点违反直觉。您需要按MemberId
分组,以获得只上过一堂课的学生:
select max(l.LessonDate) as LessonDate
from Lesson l
group by l.MemberId
having count(*) = 1;
因为学生只有一节课,max(l.LessonDate)
就是那个日期。因此,这就是您想要的:它获取只上过一堂课的成员的所有日期
你的思路也很接近。以下是我认为您正在寻找的问题:
SELECT LessonDate
FROM LESSON
WHERE MemberId in (SELECT l2.MemberId
FROM Lesson l2
GROUP BY l2.MemberId
HAVING COUNT(*) = 1
);
如果您想获取具有2行或3行的成员的日期,则此方法更具普遍性。以下方法应适用:
SELECT LessonDate
FROM LESSION L
WHERE (SELECT COUNT(1) FROM LESSION WHERE MemberId=L.MemberId)=1
你的问题被标记下来了,因为你没有证明你对这个问题做了很多研究。在发布问题之前,您可能需要查看并执行一些基本的搜索。对不起,我只是想让我的问题清晰明了。我觉得这有点不公平,在提出要求之前,我做了很多研究,尝试了很多东西,但我意识到我不知道我需要什么才能让它起作用。在这种情况下,是HAVING子句,这是我以前从未见过的。你不知道你不知道的。太好了!非常感谢你!“l2”真的有必要吗?那叫什么?@Pownasis。l2
不一定在此查询中。它被称为“表别名”,只是用来区分子查询中的表和外部查询中的表
SELECT LessonDate
FROM LESSION L
WHERE (SELECT COUNT(1) FROM LESSION WHERE MemberId=L.MemberId)=1