SQL查询获取多次出现的值

时间:2011-05-23 09:54:34

标签: sql

我需要查询我的数据库,以显示我的表中的lastname发生三次以上的记录。示例:在我的学生表中,有3个人使用姓氏'史密斯',4个人使用'约翰逊',1个人使用'波特'。我的查询应显示姓氏史密斯和约翰逊的记录,因为这些值大于或等于3次。

有人能指出这个吗?我在考虑使用COUNT(),但我似乎无法想到如何应用它?

7 个答案:

答案 0 :(得分:31)

对于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

答案 1 :(得分:21)

来自Oracle(但在大多数SQL数据库中工作):

SELECT LASTNAME, COUNT(*)
FROM STUDENTS
GROUP BY LASTNAME
HAVING COUNT(*) >= 3

P.S。它的更快之一,因为你没有在这里选择选择方法

答案 2 :(得分:12)

对于MySQL:

SELECT lastname AS ln 
    FROM 
    (SELECT lastname, count(*) as Counter 
     FROM `students` 
     GROUP BY `lastname`) AS tbl WHERE Counter > 2

答案 3 :(得分:5)

这里提到的答案非常优雅https://stackoverflow.com/a/6095776/1869562但经过测试,我发现它只返回姓氏。 如果您想要返回整个记录本怎么办? 做这个 (对于Mysql)

SELECT *
FROM `beneficiary`
WHERE `lastname`
IN (

  SELECT `lastname`
  FROM `beneficiary`
  GROUP BY `lastname`
  HAVING COUNT( `lastname` ) >1
)

答案 4 :(得分:4)

SELECT LASTNAME, COUNT(*)
FROM STUDENTS
GROUP BY LASTNAME
ORDER BY COUNT(*) DESC

答案 5 :(得分:1)

对于postgresql:

SELECT * AS rec 
FROM (
    SELECT lastname, COUNT(*) AS counter 
    FROM students 
    GROUP BY lastname) AS tbl 
WHERE counter > 1;

答案 6 :(得分:0)

我认为这个答案也可以(虽然可能需要一些修改):

SELECT * FROM Students AS S1 WHERE EXISTS(SELECT Lastname, count(*) FROM Students AS S2 GROUP BY Lastname HAVING COUNT(*) > 3 WHERE S2.Lastname = S1.Lastname)