Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con funcion de agregado

Estas en el tema de Problema con funcion de agregado en el foro de Mysql en Foros del Web. Buenas, tenia una pequeña consulta que no me realiza lo que deseo: me gustaria filtrar de una tabla las personas que superan un numero de ...
  #1 (permalink)  
Antiguo 27/05/2010, 01:28
Avatar de SunKing  
Fecha de Ingreso: mayo-2010
Mensajes: 13
Antigüedad: 13 años, 11 meses
Puntos: 0
Problema con funcion de agregado

Buenas, tenia una pequeña consulta que no me realiza lo que deseo:
me gustaria filtrar de una tabla las personas que superan un numero de bajas, para ello lo que hacia era contar el nif de las personas y agrupo por nif y en el having le digo que me saque los que la cuenta de nif es superior a 4:

SELECT NIF_PERSONA,COUNT(NIF_PERSONA),NOMBRE,APELLIDO1,AP ELLIDO2,MOTIVO FROM tabla1 order by (NIF_PERSONA) GROUP BY (NIF_PERSONA) HAVING COUNT(NIF_PERSONA)>3

Esta consulta me agrupa todos los nif que suman mas de 3 registros, pero el problema que tengo es que yo necesito que me saque los 3 registros por que el motivo siempre va a ser diferente. Necesito todos los registros de cada una de las personas pero que solo me los muestre si tienen mas de 3 en la consulta..

No se si me he explicado muy bien, si me pueden echar una mano se lo agradeceria mucho

Gracias
  #2 (permalink)  
Antiguo 27/05/2010, 06:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con funcion de agregado

Suponiendo que la tabla solo contiene Bajas

Código MySQL:
Ver original
  1. SELECT NIF_PERSONA,
  2.              COUNT(*) as Bajas
  3. FROM tablaBajas
  4. GROUP BY NIF_PERSONA

NIFs y numero de bajas de las personas con 4 o más bajas

Código MySQL:
Ver original
  1. SELECT NIF_PERSONA,
  2.              NOMBRE,
  3.              APELLIDO1,
  4.              APELLIDO2,
  5.             MOTIVO
  6. FROM tablaBajas;
Datos de las personas con bajas...


Lo juntamos todo....

Código MySQL:
Ver original
  1. SELECT t.NIF_PERSONA,
  2.              sbc.Bajas,
  3.              t.NOMBRE,
  4.              t.APELLIDO1,
  5.              t.APELLIDO2,
  6.             t.MOTIVO
  7. FROM (SELECT NIF_PERSONA,
  8.                        COUNT(*) as Bajas
  9.             FROM tablaBajas
  10.             GROUP BY NIF_PERSONA
  11.             HAVING COUNT(*)>3) as Sbc
  12.     INNER JOIN tablaBajas as t
  13.           ON Sbc.NIF_PERSONA=t.NIF_PERSONA
  14. ORDER BY t.NOMBRE,
  15.                  t.APELLIDO1,
  16.                  t.APELLIDO2,
  17.                  t.MOTIVO;

Si?

Si no quieres ver el numero de bajas tambien te puede servir esto

Código MySQL:
Ver original
  1. SELECT t.NIF_PERSONA,
  2.              t.NOMBRE,
  3.              t.APELLIDO1,
  4.              t.APELLIDO2,
  5.             t.MOTIVO
  6. FROM tablaBajas as t
  7. WHERE t.NIF_PERSONA IN (SELECT NIF_PERSONA
  8.                                      FROM tablaBajas
  9.                                      GROUP BY NIF_PERSONA
  10.                                      HAVING COUNT(*)>3)
  11. ORDER BY t.NOMBRE,
  12.                  t.APELLIDO1,
  13.                  t.APELLIDO2,
  14.                  t.MOTIVO;



Quim

Última edición por quimfv; 27/05/2010 a las 06:12

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:53.