es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excluyendo todos los registros con la misma ID si algún registro con esa ID cumple dos condiciones.

Tengo una tabla que se ve así:

ID Mascota
01 Perro
01 Gato
01 Loro
01 Cobaya
02 Perro
02 Cobaya
03 Loro

Si un ID tiene un perro y un gato, entonces quiero excluir TODOS los registros para ese ID, independientemente de qué otros animales tengan. Entonces, mi tabla de salida se vería así:

ID Mascota
02 Perro
02 Cobaya
03 Loro

Este es el query que he intentado:

PROC SQL;
CREAT TABLE nueva_tabla AS
SELECT * from Mascotas a
WHERE NOT EXISTS (SELECT *
FROM Mascotas b
WHERE b.ID = a.ID
AND b.ID = "Perro"
AND b.ID = "Guinea Gato"));
RUN;

Esto no parece estar funcionando y no está filtrando nada en realidad.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con la consulta proporcionada. Primero, la segunda condición en la subconsulta debería verificar si la mascota es un perro o un gato, no un perro y un gato. Segundo, la subconsulta solo debería devolver la ID si tiene tanto un perro como un gato, no cualquier otra combinación de animales. Finalmente, la consulta principal debe unirse en la columna ID para filtrar las IDs no deseadas.

    Aquí tienes una consulta corregida:

    PROC SQL;
    CREATE TABLE nueva_tabla AS
    SELECT a.*
    FROM Mascotas a
    LEFT JOIN (
        SELECT ID
        FROM Mascotas
        WHERE Mascota IN ('Perro', 'Gato')
        GROUP BY ID
        HAVING COUNT(DISTINCT Mascota) = 2
    ) b ON a.ID = b.ID
    WHERE b.ID IS NULL;
    QUIT;
    

    Esta consulta selecciona primero todos los registros de la tabla Mascotas, pero también incluye una subconsulta que filtra cualquier ID que tenga tanto un perro como un gato. La subconsulta selecciona solo las IDs que tienen un perro y un gato usando la cláusula HAVING para contar el número de mascotas distintas para cada ID y solo devuelve aquellas con un recuento de 2. Luego, estas IDs se unen nuevamente a la tabla principal en la columna ID y se filtran los registros con una ID coincidente utilizando la cláusula WHERE.

    El resultado debería ser una nueva tabla con solo los registros deseados:

    ID    Mascota
    02    Perro
    02    Conejillo de Indias
    03    Loro
    

Comments are closed.