【发布时间】:2012-07-29 12:11:17
【问题描述】:
有人已经帮助我完成了这个查询,但我做了修改,但遇到了问题:
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...我只是不知道为什么...!如果我按 tyd.login 分组,它也可以工作,但在这种情况下,AVG 和 COUNT 函数只能在一行上工作......
这是表格:
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 user1@tyd.fr 54 1 0 1 1343297504
109 1 1 user10@tyd.fr 34 1 0 1 1343298598
当HAVING tyd.login = "user3@tyd.fr" 完美运行。当 user1 或 user2 我得到 0 行。
感谢您的帮助
第一个主题:Sql, get the average on a group while escaping the where condition
【问题讨论】:
-
你在滥用
HAVING,它通常用于组过滤或聚合函数。我认为您应该只使用WHERE tyd.login = "user1@tyd.fr"。此外,您没有“user1”,而是“user10”。 -
如果我不使用 having 子句,我只会得到 userX 行的 AVG 和 COUNT。我想要每行的 AVG 和 COUNT 相同的 id_product 和 id_marchand。对不起 user1 和 10,我更正了。
-
您到底想从这个查询中得到什么? 当 HAVING tyd.login = "user3@tyd.fr" 它完美运行时是什么意思。。你能解释一下吗?
-
我想要 id_product 和 id_marchand 等于 id_product 和 id_marchand WHERE step = 1 HAVING userX in login 的每一行的 AVG 和 COUNT。然后是这条线的其他选择的东西。我提出的要求是独一无二的。对于同一产品,用户不能两次进入 step = 1。
-
当我使用 HAVING tyd.login = "user3" 进行查询时,我得到了整个 AVG & COUNT + 我为该行选择的行。当我输入 HAVING tyd.login = user10 时,我得到一个空答案。 user3 和 user1 行之间的唯一区别是记录顺序。例如,如果我删除 user3 行,查询将适用于 user1,但不适用于 user10。
标签: sql join group-by having average