Sql, obtenga el promedio en un grupo mientras escapa de la condición donde

disculpe mi inglés pero nadie puede responder en francés ;-)

Estoy haciendo esta solicitud:

SELECT AVG(tyd.price) AS avg_price, COUNT(tyd.id_product) AS cnt_id_p, 
       catalog.id_marchand, catalog.id_product, catalog.price AS c_price,
       catalog.img_src, tyd.login AS tyd_l
  FROM catalog 
 INNER JOIN tyd ON catalog.id_marchand = tyd.id_marchand 
               AND catalog.id_product = tyd.id_product
 WHERE tyd.login = "user1@tyd.fr"
   AND tyd.step = "0"
 GROUP BY catalog.id_product, catalog.id_marchand

Pero, por supuesto, la función AVG & COUNT no funciona porque mi condición era solo una línea.

Lo que me gustaría hacer es obtener mi línea única pero hacer que funcionen las funciones AVG y COUNT. Puedo hacerlo con dos consultas, pero prefiero hacer una.

Espero que puedas ayudarme.

Gracias.

PD: puse otro problema en la respuesta 3. ¡Me estoy enojando!

preguntado el 31 de julio de 12 a las 13:07

3 Respuestas

Prueba con

SELECT 
    AVG(tyd.price) AS avg_price, COUNT(tyd.id_product) AS cnt_id_p,
    catalog.id_marchand, catalog.id_product, catalog.price AS c_price, 
    catalog.img_src, tyd.login AS tyd_l
FROM catalog 
INNER JOIN tyd ON catalog.id_marchand = tyd.id_marchand 
              AND catalog.id_product =   tyd.id_product
              AND tyd.step = "0" 
GROUP BY catalog.id_product, catalog.id_marchand
HAVING tyd.login = "user1@tyd.fr"

Respondido 31 Jul 12, 13:07

Muchos gracias ! Lo estoy buscando desde hace dos días! - pierreaurelmartin

Como eres nuevo aquí, recuerdo que deberías aceptar una respuesta si crees que resolvió tu problema. - Marco

¡Lo siento, fue una manipulación incorrecta...! ¿Puedes revisar mi respuesta 3 sigo teniendo un problema? - pierreaurelmartin

Debe incluir todas las columnas en la cláusula GROUP BY que no forman parte de la función agregada.

SELECT AVG(tyd.price) AS avg_price, COUNT(tyd.id_product) AS cnt_id_p,  
       catalog.id_marchand, catalog.id_product, catalog.price AS c_price, 
       catalog.img_src, tyd.login AS tyd_l 
  FROM catalog  
 INNER JOIN tyd ON catalog.id_marchand = tyd.id_marchand  
               AND catalog.id_product = tyd.id_product 
 WHERE tyd.login = "user1@tyd.fr" 
   AND tyd.step = "0" 
 GROUP BY catalog.id_marchand, catalog.id_product, catalog.price AS c_price, 
       catalog.img_src, tyd.login 

Respondido 31 Jul 12, 14:07

Si la respuesta anterior estaba funcionando, esta no lo está. Solo obtengo el promedio de la línea seleccionada. - pierreaurelmartin

Lamento volver a preguntar, pero uso la misma solicitud para unirme a otra mesa, así:

    SELECT AVG(tyd.price) AS avg_price, COUNT(tyd.id_product) AS cnt, tyd.id_marchand, tyd.id_product, catalog.price AS c_price, tyd.price AS t_price, tyd.amount AS t_am, pro_tyd.amount AS p_am, pro_tyd.price AS p_price, catalog.img_src,  tyd.step, tyd.login AS tyd_l
    FROM catalog 
    INNER JOIN tyd
    ON catalog.id_marchand = tyd.id_marchand 
    AND catalog.id_product =   tyd.id_product
    AND tyd.step = "1" 
    INNER JOIN pro_tyd 
    ON tyd.id_marchand = pro_tyd.id_marchand 
    AND tyd.id_product = pro_tyd.id_product
    GROUP BY catalog.id_product, catalog.id_marchand
    HAVING tyd.login = "user1@tyd.fr"

y solo funciona cuando tyd.login = "user3@tyd.fr", que es la identificación inferior. no funciona con usuario1 o usuario2... ¡Simplemente no puedo entender por qué...!

Aquí está la tabla:

id / id_marchand / id_producto / inicio de sesión / precio / cantidad / retraso / paso / tiempo

29 / 1 / 1 / usuario3@tyd.fr / 344 / 1 / 0 / 1 / 1343297500

120 / 1 / 1 /usuario2@tyd.fr / 54 / 1 / 0 / 1 / 1343297504

109 / 1 / 1 / usuario10@tyd.fr / 34 / 1 / 0 / 1 / 1343298598

Cuando TIENE tyd.login = "user3@tyd.fr" funciona perfectamente. Cuando usuario1 o usuario2 obtuve 0 líneas.

Respondido 31 Jul 12, 17:07

De hecho solo toma la primera línea, no importa el valor de la identificación u otra cosa... - pierreaurelmartin

Eres nuevo aquí, así que te doy un consejo. No cambie su pregunta si esto ya fue respondido y resuelto. Si necesita "aumentar" su problema, publique otra pregunta y haga referencia a la respuesta anterior :) - Marco

Eso es lo que hice aquí: stackoverflow.com/questions/11744994/… gracias por tu consejo! - pierreaurelmartin

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.