2009-11-26 17 views
10

Tengo una tabla como la siguiente:... donde recuento (col)> 1

+-----+-----+-------+ 
| id | fk | value | 
+-----+-----+-------+ 
| 0 | 1 | peter | 
| 1 | 1 | josh | 
| 3 | 2 | marc | 
| ... | ... | ... | 

me gustaría ahora para obtener todas las entradas que tienen más de un valor. El resultado esperado sería:

+-----+-------+ 
| fk | count | 
+-----+-------+ 
| 1 | 2  | 
| ... | ... | 

Traté de lograr que de esta manera:

select fk, count(value) from table where count(value) > 1; 

Pero Oracle no le gustó.

Así que probamos este ...

select * from (
    select fk, count(value) as cnt from table 
) where cnt > 1; 

... sin éxito.

¿Alguna idea?

+0

¿Puede dar los mensajes de error? – bayer

Respuesta

30

Utilice la cláusula having para comparar los agregados.

Además, debe agrupar según lo que se agrega para que la consulta funcione correctamente. El siguiente es un comienzo, pero como te falta una cláusula group by todavía no funcionará. ¿Qué estás tratando de contar exactamente?

select fk, count(value) 
from table 
group by fk 
having count(value) > 1; 
+3

¿No hay un 'grupo by' perdido? 'select fk, count (*) from table group por fk having count (*)> 1' – Dirk

+0

Nunca escuché de" tener "en SQL pero era lo que estaba buscando. ¡Gracias! – cimnine

+0

@Dirk: Sí, Oracle se quejó de eso. Agregué el 'group by fk' al final para que funcione; No sé si importa si es antes o después del 'tener'. – cimnine

Cuestiones relacionadas