2015-05-08 71 views
0

让我简略介绍一下情况: 我有2个表格:producten和reviews, in producten我有多个产品存储,并且在评论中我存储了所有评论,现在试图获得在评论表mysql的评级平均值只返回1行,而我期望2行返回,因为我有2个产品。内部连接只返回1行

查询即时试图使用方法是:

SELECT p.*, CAST(AVG(r.rating) AS DECIMAL(2,1)) as waardering FROM `producten` as p INNER JOIN `reviews` as r ON p.id=r.product_id  

我也曾尝试:

SELECT p.*, CAST(AVG(r.rating) AS DECIMAL(2,1)) as waardering FROM `producten` as p INNER JOIN `reviews` as r ON r.product_id=p.id 

但这diddnt要么返回多于1行。

任何人都可以请告诉我为什么查询只返回1行,而不是所有行在producten表中找到?

也请随时告诉我如何我可以增加这个问题,如果需要的话。

+0

您对这两款产品的评论? –

+0

我确实有,是的,并且加入也会给我相同的结果 –

回答

1

你想GROUP BY p.id在查询的结尾,让你得到的平均每件产品,而不是“第一”产品字段中的值与所有产品的平均值。

+0

旁注:它可能只是我,但我没有看到你在问题中提供的两个查询之间的区别。 – Uueerdo

+0

工作!谢谢,不同之处在于我切换了p.id = r.product_id,希望能够做到这一点 –

+0

啊,现在我明白了。不,这不会影响任何事情;也许如果一方或另一方有一些使用会话变量的非常时髦的东西,但那会是一个严重不可靠的查询。 – Uueerdo

1

这是因为您正在使用AVG。它将把所有的行组合成一行。您可能想要按平均评分进行分组。

所以,如果我有一个表有两列..产品名称/等级......我会做像这样:

select productname, avg(rating) from ratings group by productname 
+0

你是什么意思? –