Basta ya de investigar en internet porque has llegado al sitio exacto, poseemos la solución que buscas sin complicarte.
Solución:
No es necesario utilizar una subconsulta o una consulta anidada. Simplemente puede AGRUPAR por Year
campo y uso HAVING COUNT(Year)=1
para encontrar las filas requeridas. Entonces, la consulta aplicable será:
SELECT Year, Event
FROM table_name
GROUP BY Year
HAVING COUNT(Year)=1
Puede encontrar la muestra de la solución ejecutable en:
http://sqlfiddle.com/#!9/b47044/11
Lógica:
Cuando agrupas por Year
agrega todas las filas con el mismo año. Entonces, el conteo será 2
por 2011
.
Puedes verificar esto ejecutando:
SELECT Year, Event, COUNT(Year) as event_count
FROM table_name
GROUP BY Year
Puede ver este paso intermedio en la ejecución en: http://sqlfiddle.com/#!9/b47044/10
Esta solución anterior solo funcionará para la versión de MySQL <5.7. Para versiones superiores, encuentre la solución a continuación.
Para 5.7 y versiones posteriores, el modo SQL ONLY_FULL_GROUP_BY está habilitado de forma predeterminada, por lo que fallará. O puede actualizar este modo (Referir las respuestas en la lista SELECT no está en la cláusula GROUP BY y contiene una columna no agregada … incompatible con sql_mode=only_full_group_by) o alternativamente puede usar ANY_VALUE()
función para referirse a la columna no agregada, por lo que la consulta de actualización que funcionará en MySQL 5.7 y superior es:
SELECT Year, ANY_VALUE(Event)
FROM table_name
GROUP BY Year
HAVING COUNT(Year)=1;
Puede encontrar un ejemplo ejecutable en: https://paiza.io/projects/e/tU-7cUoy3hQUk2A7tFfVJg
Referencia: https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/miscellaneous-functions.html#function_any-value
Tienes un pequeño error en la consulta, el count(*)
que se usa en la cláusula have también debe estar en la cláusula select
SELECT Year, Event from table where Year in (
SELECT Year from (
SELECT Year,count(*) from table GROUP BY Year Having count(*) = 1)temp
);
Solo es necesario filtrar el año y los eventos que contengan un solo evento de ese año
- Consulta interna le daría solo años que tienen un evento
- La consulta externa seleccionaría los eventos de esos años.
SELECT Year, Event from table where Year in
(SELECT Year from table GROUP BY Year Having count(*) = 1);