mysql - (My)SQL 左/右/内连接方向

标签 mysql sql join

在获取餐厅列表时,我想在此列表中加入评级数据。

例如

Table1 – restaurant
Columns: id, name, latitude, longitude

and

Table2 – ratings
Columns: id, restaurant_id, rating (value options: 1, 2, 3, 4, 5)

Constructed this:

SELECT *, SUM(ratings.rating) AS total_rating_count 
FROM restaurants 
INNER JOIN ratings 
    ON ratings.restaurant_id = restaurants.id

这只会返回 1 家餐厅。我还需要每家餐厅的可用评分量才能计算平均评分。

可以在这方面使用一些指导。

编辑: 就在我们讨论的时候,我想加入另一张 table ,上面有与餐厅相关的评论。 我应该同时深入研究这个: What is the difference between Left, Right, Outer and Inner Joins?

最佳答案

你需要 GROUP BY 子句:

SELECT 
  *, AVG(ratings.rating) AS avg_rating_count 
FROM 
  restaurants 
    INNER JOIN ratings ON ratings.restaurant_id = restaurants.id 
GROUP BY 
  restaurants.id

-因为你提到了平均值,所以我放置了 AVG()查询中的函数。但请注意,这在普通 SQL 中是无效的(非组列与组函数的混合)- 并且在 MySQL DBMS 方面没有指定将返回哪一行。

关于mysql - (My)SQL 左/右/内连接方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19292964/

相关文章:

sql - 从一张表中获取交叉数据的最佳方法是什么?

python - 如何使用 Django 在一个查询中从多个表中进行选择?

sql - 嵌套查询: best practices

database - 估计加入关系的大小

MySQL 在收到我的查询时抛出错误

php - 数学运算 PHP 与时间

php - 无法从 PHP 中的动态下拉列表获取值 - 未定义索引错误

android - MySql - java.Lang.ClassNotFoundException :com. mysql.jdbc.Driver (React Native, Android)

java - 如何将单个子字符串与 Sql 中的字符串进行匹配?

sql - MYSQL SUM GROUP BY