Columna "no válida en la lista de selección porque no está contenida ni en una función agregada ni en la cláusula GROUP BY"

Resuelto msvuze asked hace 11 años • 6 respuestas

Me gustaría mostrar la columna Ben mi siguiente SQL, pero cuando la agrego a la consulta me da el siguiente error:

La columna T2.B' no es válida en la lista de selección porque no está contenida ni en una función agregada ni en la cláusula GROUP BY.

Mi código:

SELECT A, COUNT(B) as T1, B 
FROM T2 
WHERE ID=1 
GROUP BY A 
msvuze avatar Aug 16 '13 00:08 msvuze
Aceptado

En otras palabras, este error le indica que SQL Server no sabe cuál B seleccionar del grupo.

O desea seleccionar un valor específico (por ejemplo MIN, SUM, o AVG), en cuyo caso usaría la función agregada adecuada, o desea seleccionar cada valor como una nueva fila (es decir, incluirlo Ben la GROUP BYlista de campos).


Considere los siguientes datos:

ID AB
1 1 13
1 1 79
1 2 13
1 2 13
1 2 42

La consulta

SELECT A, COUNT(B) AS T1 
FROM T2 
GROUP BY A

volvería:

A LA 1
1 2
2 3

Esto es bueno y fabuloso.

Sin embargo, considere la siguiente consulta (ilegal), que produciría este error:

SELECT A, COUNT(B) AS T1, B 
FROM T2 
GROUP BY A

Y su conjunto de datos devueltos que ilustran el problema:

Una T1 B
1 2 13? 79? ¿Tanto 13 como 79 como filas separadas? (13+79=92)? ...?
2 3 13? 42? ...?

Sin embargo, las dos consultas siguientes aclaran esto y no provocarán el error:

  1. Usando un agregado

    SELECT A, COUNT(B) AS T1, SUM(B) AS B
    FROM T2
    GROUP BY A
    

    volvería:

    Una T1 B
    1 2 92
    2 3 68
    
  2. Agregar la columna a la GROUP BYlista

    SELECT A, COUNT(B) AS T1, B
    FROM T2
    GROUP BY A, B
    

    volvería:

    Una T1 B
    1 1 13
    1 1 79
    2 2 13
    2 1 42
    
lc. avatar Aug 15 '2013 18:08 lc.

Agregue una columna en el grupo como se muestra a continuación:

SELECT A, COUNT(B) as T1, B 
FROM T2 
WHERE ID=1 
GROUP BY A,B
Abhishek Mishra avatar Jan 31 '2023 09:01 Abhishek Mishra