2011-05-23 72 views
19

我需要查询我的数据库,以显示我的表内的姓氏出现三次以上的姓氏。例如:在我的学生表中,有3个姓'Smith',4个'Johnson',1个'Potter'。我的查询应该显示那些姓氏史密斯和约翰逊的记录,因为这些值的出现次数大于或等于3次。SQL查询获取值不止一次

任何人都可以指向我吗?我正在考虑使用COUNT(),但似乎无法考虑如何应用它?

+0

什么RDBMS好吗? – 2011-05-23 09:57:50

回答

20

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

五年过去了,仍然是一件艺术品。 +1 – EvilDr 2016-07-28 09:31:34

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

OP要求“史密斯和约翰逊姓氏的记录”不仅仅是姓氏本身。 – 2011-05-23 10:09:29

9

对于MySQL:

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

从甲骨文(但在大多数SQL的DB 工作):

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

附:这是更快一个,因为你没有选择withing选择方法这里

0

对于PostgreSQL:

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

这里所说的回答也相当考究https://stackoverflow.com/a/6095776/1869562但在测试时,我意识到它只返回姓氏。 如果您想要返回整个记录本身,该怎么办? 做到这一点 (MySQL的)

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

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

很好,谢谢! – Hammerbot 2017-06-13 10:42:53