我需要查询我的数据库,以显示我的表中的lastname发生三次以上的记录.示例:在我的学生表中,有3个人使用姓氏'史密斯',4个人使用'约翰逊',1个人使用'波特'.我的查询应显示具有姓氏Smith和Johnson的记录,因为这些值发生的次数大于或等于3次.
谁能指点我这个?我在考虑使用COUNT(),但我似乎无法思考如何应用它?
Mar*_*ith 33
对于SQL Server 2005+
;WITH T AS
(
SELECT *,
COUNT(*) OVER (PARTITION BY Lastname) as Cnt
FROM Students
)
SELECT * /*TODO: Add column list. Don't use "*" */
FROM T
WHERE Cnt >= 3
Run Code Online (Sandbox Code Playgroud)
Анд*_*чук 23
来自Oracle(但适用于大多数SQL DB):
SELECT LASTNAME, COUNT(*)
FROM STUDENTS
GROUP BY LASTNAME
HAVING COUNT(*) >= 3
Run Code Online (Sandbox Code Playgroud)
PS它更快,因为你在这里没有Select withing Select方法
Til*_*ill 13
对于MySQL:
SELECT lastname AS ln
FROM
(SELECT lastname, count(*) as Counter
FROM `students`
GROUP BY `lastname`) AS tbl WHERE Counter > 2
Run Code Online (Sandbox Code Playgroud)
SELECT LASTNAME, COUNT(*)
FROM STUDENTS
GROUP BY LASTNAME
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)
这里提到的答案是相当优雅的/sf/answers/426704351/,但经过测试,我意识到它只返回姓氏。如果您想返回整个记录本身怎么办?执行此操作(对于Mysql)
SELECT *
FROM `beneficiary`
WHERE `lastname`
IN (
SELECT `lastname`
FROM `beneficiary`
GROUP BY `lastname`
HAVING COUNT( `lastname` ) >1
)
Run Code Online (Sandbox Code Playgroud)