表LESSON
有場LessonDate, MemberId
(其中包括但只有這兩個是相關的)SQL:選擇COUNT = 1個
英文:給我上,學生已永遠只能採取1班的日期列表,上了那堂課。
我試過了很多東西。這是我的最新嘗試:
SELECT LessonDate
FROM LESSON
WHERE (SELECT COUNT(MemberId) GROUP BY (MemberId)) = 1
只是一直返回SQL錯誤。顯然語法和邏輯是關閉的。
表LESSON
有場LessonDate, MemberId
(其中包括但只有這兩個是相關的)SQL:選擇COUNT = 1個
英文:給我上,學生已永遠只能採取1班的日期列表,上了那堂課。
我試過了很多東西。這是我的最新嘗試:
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)
是日期。因此,這就是你想要的:它可以獲得只有一個班級的成員的所有日期。
您的思路也非常接近。下面是我想你要找的查詢:
SELECT LessonDate
FROM LESSON
WHERE MemberId in (SELECT l2.MemberId
FROM Lesson l2
GROUP BY l2.MemberId
HAVING COUNT(*) = 1
);
這種方式更加普及,如果你想獲得對具有2個或3行成員的日期。
完美!非常感謝! 「十二」事情真的有必要嗎?那叫什麼? – Jeimuzu
@pownassis。 。 。 'l2'不一定在這個查詢中。它被稱爲「表別名」,僅用於區分子查詢中的表和外部查詢中的表。 –
select count(LessonDate) as Lesson_date,MemberId from Lesson group by MemberId having Lesson_Date=1
或
select * from
(
select *,rn=Row_number()over(partition by LessonDate order by MemberId) from Lesson
)
where rn=1
你需要尋找到SELECT ... FROM ... GROUP BY ... HAVING
有大量的文檔資料可在網上通過搜索GROUP BY
例如This article
下面的SQL組由MemberId
我thnk是錯了,因爲你要計算的會員ID的數量,
SELECT
LessonDate
, MemberId
, COUNT(*) AS Lesson_Count
FROM
Lesson
GROUP BY
LessonDate
, MemberId
HAVING
COUNT(*) = 1
上面的查詢會給你「日期」,「成員」列表,以及那個「成員」在那一天所吸取的教訓的數量。我不認爲你需要將聚合函數(COUNT(*) AS Lesson_Count
)作爲select語句的一部分,但它通常「很高興有」給你信心,結果如你所期望的那樣。
您的查詢實際上是失敗的,因爲子查詢沒有一個FROM
語句,但上面是更好的做法:
SELECT LessonDate
FROM LESSON
WHERE (SELECT COUNT(MemberId) FROM Lesson GROUP BY (MemberId)) = 1
下面應該工作:
SELECT LessonDate
FROM LESSION L
WHERE (SELECT COUNT(1) FROM LESSION WHERE MemberId=L.MemberId)=1
Thanx Wibble,我很喜歡這裏:) – needfulthing
你的問題被標記下來,你還沒有證明你已經很研究這個問題。你可能想看看[這篇文章如何提出問題](http://stackoverflow.com/questions/how-to-ask),並在你真正發佈你的問題之前執行一些基本的搜索。 – talegna
對不起,我只是想保持我的問題清晰簡潔。我認爲這有點不公平,我做了很多研究並在詢問之前嘗試了很多東西,但是我意識到我不知道需要什麼才能使其工作。在這種情況下,這是我從未見過的HAVING條款。你不知道你不知道什麼。 – Jeimuzu