2017-04-18 62 views
-3

我需要編寫一份SQL語句,其中列出了參加醫院的每位贊助人的詳細信息以及他們進行了多少次訪問。他們的訪問記錄在Registrations表中。該列表將按訪問次數排序。SQL COUNT Duplicates

以下是我的一些樣本數據一起表...

贊助

PatronID | FirstName | LastName | eMail 
---------|-----------|----------|------ 
1  | Joe  | Bloggs | [email protected] 
2  | Trung  | Nguyen | [email protected] 

註冊記憶

RegistrationID | PatronID 
---------------|--------- 
1    | 1 
2    | 2 
3    | 2 
4    | 1 
5    | 2 

以下是我多麼希望一個例子爲我的輸出出現...

PatronID | FirstName | LastName | eMail | visitsCount 
---------|-----------|----------|-------|------------ 
2  | Trung  | Nguyen | [email protected] | 3 
1  | Joe  | Bloggs | [email protected] | 2 

到目前爲止,我的嘗試都沒有什麼意義,我所做的研究同樣令人困惑,因爲它有幫助。有人能幫助我,或者至少可以讓我朝正確的方向發展。

+0

這是你的作業之一嗎?即時通訊美麗這是一個重複的情況下,通過計數解決 – maSTAShuFu

+0

你到目前爲止嘗試過什麼? –

+1

我投票結束這個問題作爲題外話,因爲這不是*請做我的作業*我的網站。如果您在入門時遇到困難,請向您的教練尋求幫助。他們正在獲得支付以指導你,看來他們還沒有完成那項工作。 –

回答

-1

請嘗試以下...

SELECT Patrons.PatronID, 
     FirstName, 
     LastName, 
     eMail, 
     visitsCount 
FROM Patrons 
INNER JOIN (SELECT PatronID, 
        COUNT(PatronID) AS visitsCount 
      FROM Registrations 
      GROUP BY PatronID 
      ) AS visitsCountFinder ON Patrons.PatronID = visitsCountFinder.PatronID 
WHERE visitsCount > 1 
ORDER BY visitsCount; 

這是通過先擬定一個來自RegistrationsPatronID值的列表以及在Registrations(其名稱爲visitsCount)內發生的次數的計數。然後它JOIN s此列表到Patrons表,以便每個贊助人的值visitsCount被放置在與Patrons的相應記錄相同的記錄中。

然後我們SELECT所需的字段WHERE計數大於1並按結果記錄集的計數值排序。

如果您有任何問題或意見,請隨時發佈相應評論。

+0

發現並糾正了一個小錯誤 – toonice

+0

我在查詢表達式'COUNT(patronID)VisitsCount' –

+0

已發佈更正中收到語法錯誤(缺少運算符)。 – toonice

-1

如果他們參觀了不止一次這會給顧客和他們的訪問計數的列表:

select patrons.patronid, patrons.firstname. patrons.lastname, patrons. email, visits 
from 
(
    select patronid, count(*) visits 
    from registrations 
    group by patronid 
    having count(*) > 1 
) dups 
join patrons on dups.patronid = patrons.patronid 
+0

我很欣賞快速響應,但是當我運行代碼時,我在FROM子句中出現了「語法錯誤」。 –

+0

請發佈您的2個表的定義並指出您正在使用的是哪個Sql Server。 –

+0

這個問題非常清楚地標記**毫秒訪問**。 –