2011-05-23 51 views
19

Necesito consultar mi base de datos para mostrar los registros dentro de mi tabla donde apellido aparece más de tres veces. Ejemplo: en mi Tabla de Estudiantes, hay 3 personas con el Apellido 'Smith', 4 con 'Johnson' y 1 con 'Potter'. Mi consulta debe mostrar los registros de aquellos con los últimos nombres Smith y Johnson ya que estos valores ocurren más de o 3 veces.Consulta SQL para obtener el valor que aparece más de una vez

¿Alguien me puede indicar esto? Estaba pensando en usar COUNT() pero parece que no puedo pensar cómo aplicarlo?

+0

Lo RDBMS por favor? –

Respuesta

20

Para 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

Cinco años más tarde, y sigue siendo una obra de arte. +1 – EvilDr

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

El OP quiere "los registros de aquellos con los últimos nombres Smith y Johnson", no solo los apellidos. –

9

Para MySQL:

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

De Oracle (pero obras en la mayor parte de SQL DB):

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

P. S. es más rápido uno, porque no tienes Seleccionar withing Seleccionar métodos aquí

0

para PostgreSQL:

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

Las respuestas mencionadas aquí es bastante elegante https://stackoverflow.com/a/6095776/1869562 pero en las pruebas, me di cuenta de que sólo devuelve el apellido. ¿Qué sucede si quiere devolver el registro completo? Haga esto (para MySQL)

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

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

Funciona muy bien, gracias! – Hammerbot

Cuestiones relacionadas