Saltar al contenido

SELECCIONE una columna que no esté en la cláusula GROUP BY

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 Yearagrega 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

  1. Consulta interna le daría solo años que tienen un evento
  2. 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);

Te mostramos las comentarios y valoraciones de los lectores

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *