SQL COUNT重复

时间:2017-04-18 00:12:58

标签: sql ms-access

我需要编写一份SQL语句,列出每位参加医院的顾客的详细信息以及他们的访问次数。他们的访问记录在Registrations表中。该列表将按访问次数排序。

以下是我的表格以及一些示例数据...

赞助人

PatronID | FirstName | LastName | eMail
---------|-----------|----------|------
1        | Joe       | Bloggs   | a@a
2        | Trung     | Nguyen   | b@b

注册记忆

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

以下是我希望输出显示的示例...

PatronID | FirstName | LastName | eMail | visitsCount
---------|-----------|----------|-------|------------
2        | Trung     | Nguyen   | b@b   | 3
1        | Joe       | Bloggs   | a@a   | 2

到目前为止,我的所有尝试都没有多大意义,我所做的研究也很困惑,因为它很有帮助。有人可以帮助我,或者至少指出我正确的方向。

2 个答案:

答案 0 :(得分:-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

答案 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;

首先从PatronID中提取Registrations值列表,并计算PatronID RegistrationsvisitsCount内的出现频率(名称为{ {1}})。然后JOIN将此列表Patrons发送到visitsCount表,以便每个Patron的Patrons值与SELECT中的相应记录放在同一记录中。

然后我们WHERE所需的字段1计数大于interface IValidatable { checkValidation: () => boolean; } function validated<T>(Class: {new():T}): {new():T & IValidatable} { Class.prototype.checkValidation = () => true; return Class as {new():T & IValidatable}; } ,并按照计数值对结果记录集进行排序。

如果您有任何问题或意见,请随时发表评论。