我需要查询我的数据库,以显示我的表内的姓氏出现三次以上的姓氏。例如:在我的学生表中,有3个姓'Smith',4个'Johnson',1个'Potter'。我的查询应该显示那些姓氏史密斯和约翰逊的记录,因为这些值的出现次数大于或等于3次。SQL查询获取值不止一次
任何人都可以指向我吗?我正在考虑使用COUNT(),但似乎无法考虑如何应用它?
我需要查询我的数据库,以显示我的表内的姓氏出现三次以上的姓氏。例如:在我的学生表中,有3个姓'Smith',4个'Johnson',1个'Potter'。我的查询应该显示那些姓氏史密斯和约翰逊的记录,因为这些值的出现次数大于或等于3次。SQL查询获取值不止一次
任何人都可以指向我吗?我正在考虑使用COUNT(),但似乎无法考虑如何应用它?
对于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 – EvilDr 2016-07-28 09:31:34
SELECT LASTNAME, COUNT(*)
FROM STUDENTS
GROUP BY LASTNAME
ORDER BY COUNT(*) DESC
OP要求“史密斯和约翰逊姓氏的记录”不仅仅是姓氏本身。 – 2011-05-23 10:09:29
对于MySQL:
SELECT lastname AS ln
FROM
(SELECT lastname, count(*) as Counter
FROM `students`
GROUP BY `lastname`) AS tbl WHERE Counter > 2
从甲骨文(但在大多数SQL的DB 工作):
SELECT LASTNAME, COUNT(*)
FROM STUDENTS
GROUP BY LASTNAME
HAVING COUNT(*) >= 3
附:这是更快一个,因为你没有选择withing选择方法这里
对于PostgreSQL:
SELECT * AS rec
FROM (
SELECT lastname, COUNT(*) AS counter
FROM students
GROUP BY lastname) AS tbl
WHERE counter > 1;
这里所说的回答也相当考究https://stackoverflow.com/a/6095776/1869562但在测试时,我意识到它只返回姓氏。 如果您想要返回整个记录本身,该怎么办? 做到这一点 (MySQL的)
SELECT *
FROM `beneficiary`
WHERE `lastname`
IN (
SELECT `lastname`
FROM `beneficiary`
GROUP BY `lastname`
HAVING COUNT(`lastname`) >1
)
很好,谢谢! – Hammerbot 2017-06-13 10:42:53
什么RDBMS好吗? – 2011-05-23 09:57:50