2011-04-21 11 views
9

Creo una tabla en HIVE. Tiene las siguientes columnas:colmena Expresión no en grupo por clave

id bigint, rank bigint, date string 

quiero llegar promedio (rango) por mes. Puedo usar este comando. Funciona.

select a.lens_id, avg(a.rank) 
from tableA a 
group by a.lens_id, year(a.date_saved), month(a.date_saved); 

Sin embargo, también quiero obtener información sobre la fecha. Yo uso este comando:

select a.lens_id, avg(a.rank), a.date_saved 
from lensrank_archive a 
group by a.lens_id, year(a.date_saved), month(a.date_saved); 

Se queja: Expression Not In Group By Key

Respuesta

13

El mensaje de error completo debe estar en el formato Expression Not In Group By Key [value].
El [value] le dirá qué expresión debe estar en el Group By.

Solo mirando las dos consultas, diría que debe agregar a.date_saved explícitamente al Group By.

+2

Sí. Después de agregar a.date_saved, funciona. Sin embargo, no hace lo que quiero. Quiero avg (rango) por mes. Ahora no hace promedio. Simplemente muestra todos los registros desde que se agregó el grupo por a.date_saved. – chnet

+2

@chnet: no puede tener una columna seleccionada y no tenerla agrupada por esa columna. Si desea mostrar 'a.date_saved', necesita agruparlo. Es posible que pueda mostrar 'year (a.date_saved)' y 'month (a.date_saved)' ya que están en 'Group by' pero no 100% en eso. – Nija

+0

Gracias. Puedo mostrar el año (a.date_saved) y el mes (a.date_saved). – chnet

9

Un paseo es poner el campo adicional en un collect_set y devolver el primer elemento del conjunto. Por ejemplo

select a.lens_id, avg(a.rank), collect_set(a.date_saved)[0] 
from lensrank_archive a 
group by a.lens_id, year(a.date_saved), month(a.date_saved); 
0

También estaba mirando en la misma problem.if que usted está tratando de ejecutar la consulta mediante línea recta a continuación, escriba su consulta en minúsculas.

+0

editar respuesta claramente –

Cuestiones relacionadas