SQL查询获取多次出现的值

Smi*_*ley 26 sql

我需要查询我的数据库,以显示我的表中的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)

  • 也适用于 bigquery :) (2认同)

Анд*_*чук 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方法

  • 很好的答案。它足够通用,可以轻松转换为我手头的简单任务。 (4认同)

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)


gar*_*rtb 6

SELECT LASTNAME, COUNT(*)
FROM STUDENTS
GROUP BY LASTNAME
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)

  • OP希望"史密斯和约翰逊的姓氏记录"不仅仅是姓氏本身. (2认同)

Kud*_*nle 5

这里提到的答案是相当优雅的/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)