4 messages in com.mysql.lists.mysql-esGROUP BY
FromSent OnAttachments
Luciano A.F.20 Jun 2007 18:10 
Migue21 Jun 2007 05:28 
Miguel Angel Orenes22 Jun 2007 09:54 
Luciano A.F.23 Jun 2007 16:36 
Subject:GROUP BY
From:Luciano A.F. (lua@yahoo.com.ar)
Date:06/20/2007 06:10:27 PM
List:com.mysql.lists.mysql-es

Tengo una duda, cuando utilizo GROUP BY y muestro algunos campos, que no afecto por ninguna función de agregado. Le paso un ejemplito bien armado para explicar lo que quiero decir:

-- Creo la siguiente tablita CREATE TABLE test ( ID INT NOT NULL, VAL FLOAT, RESPONSABLE CHAR(32) );

-- Agrego un par de valores para tener con que hacer la prueba INSERT INTO test (ID, VAL, RESPONSABLE) VALUES (1, 8, 'Juan'),(1, 10, 'Pepe'),(2, 6, 'Jose'),(1, 7, 'Carlos'),(3, 5, 'Claudio'),(2, 1, 'Miguel'),(3, 9, 'Javier');

-- La tabla me quedo así SELECT * FROM test; /* ID VAL RESPONSABLE ------ ------ ----------- 1 8 Juan 1 10 Pepe 2 6 Jose 1 7 Carlos 3 5 Claudio 2 1 Miguel 3 9 Javier */

-- Hago una consulta agrupando SELECT id,SUM(val),COUNT(*) FROM test GROUP BY id; /* id SUM(val) COUNT(*) ------ -------- -------- 1 25 3 2 7 2 3 14 2 */

-- Ahora, si hago la siguiente consulta agrupando, pero ademas agrego el campo responsable -- Aca vienen mis dudas: -- la consulta la ejecuta... pero ¿Qué CRITERIO USA MySQL PARA MOSTRAR EL CAMPO responsable QUE NO ES AFECTADO POR NINGUNA FUNCIÓN DE AGREGADO?. No me parece muy convincente, que el analizador me acepte una consulta similar. -- Ahora, si yo quisiera que el responsable que me muestre se corresponda con el registro que tiene el máximo "val" ¿Se podría hacer sin hacer uso de JOINs?

SELECT id,SUM(val),COUNT(*),responsable FROM test GROUP BY id;

/* id SUM(val) COUNT(*) responsable ------ -------- -------- ----------- 1 25 3 Juan 2 7 2 Jose 3 14 2 Claudio */