我正在使用以下查询
select
*,
dealer.id As dealerID,
services.id as serviceID
from services
LEFT JOIN dealer
on services.dealer=dealer.id
LEFT JOIN reviews
ON reviews.dealer_id=dealer.id
where services.brand_id = '9' and
services.model_id='107' and
services.petrol > 0
ORDER BY services.total asc ,
AVG(reviews.rating) desc
我有6条记录,它应该显示6条记录而不是只显示1.当我删除AVG(reviews.rating)desc。它显示所有记录。
服务
经销商
评论
我不确定我在哪里做错了。如果有人可以提供帮助。
答案 0 :(得分:1)
avg()
是聚合函数。也就是说,它从多行获取数据并对其进行汇总。
如果没有group by
,则查询是对所有数据的聚合查询。这样的查询总是只返回一行。
当您使用select *
,使用聚合函数且没有group by
时,大多数数据库都会返回错误。 MySQL有一个(mis)功能,允许这种语法(尽管在最新版本中,默认设置不允许这样做。)
我不确定你要做什么,但avg()
在这种情况下没有意义。也许这就是你想要的:
ORDER BY services.total asc, reviews.rating desc
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以尝试:
SELECT
*,
AVG(c.rating) AS `avg__rating`,
b.id AS dealerID,
a.id AS serviceID
FROM services a
LEFT JOIN dealer b
on a.dealer = b.id
LEFT JOIN reviews c
ON c.dealer_id = b.id
WHERE a.brand_id = '9' and
a.model_id='107' and
a.petrol > 0
GROUP BY a.dealer, a.brand_id, a.model_id, a.petrol, a.id, a.total
ORDER BY a.total asc,
AVG(c.rating) desc
这会在服务表的列中添加GROUP BY,这样每个服务/经销商就会获得一行。