我有一張MySQL表格,每名學生都會註冊一次。我想提出一個查詢,以顯示出生在yyyy的學生結束aaaa的nnn學生。我得到了這個查詢工作很快,但是困擾我的部分是我在數據庫中有一些重複條目,我需要從總計中拒絕。MySQL CrossTab並刪除重複記錄
這是我的查詢到目前爲止。而且,正如我所說的,我知道它允許重複數年。
SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding
FROM Enrollment
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear
結果落得看起來像(如果我把一個WHERE子句來限制對特定學生):
YearCount BirthYear AcadYearEnding
1 2007 2012
2 2007 2013
1 2007 2014
1 2007 2015
這與生成上述數據WHERE子句查詢。 ..但我最終將刪除WHERE子句以顯示所有學生,但沒有重複的任何學生的條目。
SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding
FROM Enrollment
WHERE StudentId=16183
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear
鑑於我的where子句限制到一個學生,我所知道的2013項是數據庫中的一個額外行的結果(和做對數據清理是不是一種選擇,我們需要在查詢中限制它)。
我試着做一個子選擇給我一個獨特的學生ID列表......但在2013年,它發現兩次學生證,所以它仍然計算兩次。
這裏是產生不正確的結果的原始數據,因爲有2條記錄爲2013:
RecId StudentId Birthdate AcadYearEnding
39885 16183 11/29/2005 2012
33768 16183 11/29/2005 2013
31020 16183 11/29/2005 2013
59508 16183 11/29/2005 2014
64054 16183 11/29/2005 2015
RecId爲表中的唯一標識符。
這可能是我需要的是以下(但我希望有人確認):
SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding
FROM (SELECT DISTINCT(StudentId), birthdate, AcadYearEnding From Test) As Ed
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear
你能告訴我們一些樣本數據和預期結果嗎?現在我不清楚重複數據在哪裏。 –
上面的數據是在將輸出限制爲單個學生的where子句後輸出的實際樣本數據。當只看一個學生時,我應該在每年的第一列中有1個...重複行在2013年。 –
我們再次需要源數據,因此我們可以清楚地看到查詢如何產生輸出。如果將當前的產出和預期產出放在一起,也很容易理解,因此我們可以發現問題所在。 –