Valores comunes de la misma tabla en MySQL

Tengo una tabla como PCity, donde hay 2 atributos como se muestra a continuación: Estoy usando MySQL.

City    Year
A   2017
B   2017
C   2017
A   2018
B   2018
C   2018
A   2019
B   2019
C   2019
A   2020
B   2020
D   2020
E   2020
F   2020

Quiero conseguir sólo las ciudades que están presentes en todos los años:

City    Year
A   2017
B   2017
A   2018
B   2018
A   2019
B   2019
A   2020
B   2020

Pregunta hecha hace 3 años, 4 meses, 27 días - Por scriptsculptorbf10


3 Respuestas:

  • Aquí hay una opción usando funciones de ventana:

    select *
    from (
        select t.*, count(*) over(partition by city) cnt
        from mytable t
    ) t
    where cnt = (select count(distinct year) from mytable)
    

    Esto requiere MySQL 8.0. En versiones anteriores, una alternativa utiliza subqueries:

    select *
    from mytable t
    where (select count(*) from mytable t1 where t1.city = t.city)
        = (select count(distinct year) from mytable)
    

    Si hubiera duplicados en la tabla (a diferencia de lo que muestra tu muestra de datos), usarías count(distinct year) en la primera subquería en lugar de count(*).

    Respondida el Dec 18, 2020 a las 11:47 - por codecanvas

    Votos positivos: 0 | Votos negativos: 0

  • Para obtener las ciudades que están presentes en todos los años en tu tabla, puedes utilizar una consulta SQL con GROUP BY y HAVING. Aquí te muestro cómo puedes hacerlo:

    sql
    SELECT City, Year
    FROM PCity
    WHERE City IN (
        SELECT City
        FROM PCity
        GROUP BY City
        HAVING COUNT(DISTINCT Year) = (SELECT COUNT(DISTINCT Year) FROM PCity)
    )
    ORDER BY City, Year;
    

    En esta consulta, primero se hace una subconsulta para obtener las ciudades que están presentes en todos los años. Luego, se seleccionan las filas de la tabla original que corresponden a esas ciudades y se ordenan por nombre de ciudad y año.

    Espero que esta solución te sea útil. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 19, 2020 a las 11:45 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Eficiencia

    Γ2015-08-16[

    Respondida el Dec 19, 2020 a las 11:54 - por Gemini

    Votos positivos: 0 | Votos negativos: 0