Sql,在逃避where条件的同时获得组的平均值

时间:2012-07-31 12:48:35

标签: sql group-by average

原谅我的英语,但没有人能用法语回答; - )

我正在做这个请求:

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

但当然AVG& COUNT函数不起作用,因为我的条件只有一行。

我想做的仍然是获得我的独特路线,但AVG和COUNT功能正常工作。我可以用两个查询来做,但我更喜欢做一个。

我希望你能帮助我。

感谢。

P.S:我在答案3中提出了另一个问题。我生气了!

3 个答案:

答案 0 :(得分:0)

尝试

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"

答案 1 :(得分:0)

您应该在GROUP BY子句中包含不属于聚合函数的所有列。

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 

答案 2 :(得分:0)

我很抱歉回复,但我使用相同的请求加入另一张表,如:

    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"

它只适用于tyd.login =“user3@tyd.fr”,这是较低的ID。不适用于user1或user2 ......我只是无法理解为什么......!

这是表格:

id / id_marchand / id_product / login / price / amount / delay / step / time

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

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

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

当Hyding tyd.login =“user3@tyd.fr”时它完美无缺。当user1或user2得到0行时。