Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询选择相同的数据_Mysql_Sql - Fatal编程技术网

Mysql SQL查询选择相同的数据

Mysql SQL查询选择相同的数据,mysql,sql,Mysql,Sql,在我的查询中,rating\u food、rating\u service和rating\u decor为我的所有结果返回相同的值 select `restaurants`.*, `rating`.*, (rating.rating_food + rating.rating_service + rating.rating_decor) / 3 as rating_total from ( SELECT avg(reviews.rating_food) * (- 1 / (0.33 * count

在我的查询中,
rating\u food
rating\u service
rating\u decor
为我的所有结果返回相同的值

select `restaurants`.*, `rating`.*, (rating.rating_food + rating.rating_service + rating.rating_decor) / 3 as rating_total from
(
SELECT
avg(reviews.rating_food) * (- 1 / (0.33 * count(reviews.id) + 1) + 1) + 5 * 1 / (count(reviews.id) + 1 ) as rating_food,
avg(reviews.rating_service) * (- 1 / (0.33 * count(reviews.id) + 1) + 1) + 5 * 1 / (count(reviews.id) + 1 ) as rating_service,
avg(reviews.rating_decor) * (- 1 / (0.33 * count(reviews.id) + 1) + 1) + 5 * 1 / (count(reviews.id) + 1 ) as rating_decor
FROM restaurants
JOIN reviews ON reviews.restaurant_id = restaurants.id
)
as rating, restaurants
order by `rating_total` asc limit 12
预期结果:
一个包含12个结果和三个额外计算列的数组(
rating\u food
etc)


现在我得到了12个结果,但是他们所有的
rating\u food
rating\u service
rating\u decor
对所有结果返回相同的值。

您需要将
ratings
子查询与
restaurants
表连接起来

试试这个:

select `restaurants`.*, `rating`.*, 
(rating.rating_food + rating.rating_service + rating.rating_decor) / 3 as rating_total from
(
SELECT
restaurants.id,
avg(reviews.rating_food) * (- 1 / (0.33 * count(reviews.id) + 1) + 1) + 5 * 1 / (count(reviews.id) + 1 ) as rating_food,
avg(reviews.rating_service) * (- 1 / (0.33 * count(reviews.id) + 1) + 1) + 5 * 1 / (count(reviews.id) + 1 ) as rating_service,
avg(reviews.rating_decor) * (- 1 / (0.33 * count(reviews.id) + 1) + 1) + 5 * 1 / (count(reviews.id) + 1 ) as rating_decor
FROM restaurants
JOIN reviews ON reviews.restaurant_id = restaurants.id
GROUP by restaurants.id
)
as rating join restaurants on rating.id = restaurants.id
order by `rating_total` asc limit 12

SQL FIDLE:

是否在派生表中添加GROUPBY子句?和主查询连接条件编辑您的问题并提供示例数据和所需结果。这可能会让你感到惊讶,但一个不起作用的查询并不一定能很好地传达你想要做的事情。@GordonLinoff已经添加了一个解释。为什么评级和餐馆之间没有联接条件?正如前面所写的,你正在交叉联接所有评级的餐馆。您没有关联它们。这将返回1个结果。预期已修复,但缺少一组。还链接了新的SQL Fiddle。这就解决了它!我添加了左连接评论以获取所有结果,即使它们与任何评论都没有关系。