mysql - SQL Join left, group by 得到 Where ID 只等于一个特定的
问题描述
所以我有一个如下的 SQL 查询,它可以完美地获得我的平均费率和与之相关的其他值。
SELECT deal_page.id,
deal_page.merchant_id,
deal_page.category_id,
deal_page.emirate_id,
deal_page.title,
deal_page.title,
deal_page.description,
deal_page.emirate,
deal_page.lat,
deal_page.lng,
deal_page.address,
deal_page.thumbnail_name,
deal_page.price,
deal_page.created_at,
AVG(ratings.ratings) AS ratings
FROM deal_page
LEFT JOIN ratings ON deal_page.id = ratings.deal_id
GROUP BY deal_page.id
ORDER BY lat ASC
没有我试图让数据库让我得到 deal_page 上的 emirate_id 等于 2 的列表。我尝试了下面的查询,但它给了我一个错误:
SELECT deal_page.id,
deal_page.merchant_id,
deal_page.category_id,
deal_page.emirate_id,
deal_page.title,
deal_page.title,
deal_page.description,
deal_page.emirate,
deal_page.lat,
deal_page.lng,
deal_page.address,
deal_page.thumbnail_name,
deal_page.price,
deal_page.created_at,
AVG(ratings.ratings) AS ratings
FROM deal_page
LEFT JOIN ratings ON deal_page.id = ratings.deal_id
GROUP BY deal_page.id
ORDER BY lat ASC
WHERE deal_page.emirate_id = 2;
错误说:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“WHERE deal_page.emirate_id = 2 LIMIT 0, 25”附近使用正确的语法
解决方案
Where
应该在聚合之前进行:
SELECT . . .
FROM deal_page dp LEFT JOIN
ratings r
ON dp.id = r.deal_id
WHERE deal_page.emirate_id = 2
GROUP BY dp.id
ORDER BY lat ASC ;
注意:我使用了表别名,因此很容易为来自的列编写 & 更少的输入(避免完整的表名)。
推荐阅读
- react-native - react-native 支付无法调用 React 原生支付
- python - 使用 pandas 一次将多个城市名称格式化为每个城市的通用名称
- python - 如何根据图像标签在python中创建图像子文件夹
- java - 在 Generic Generator 原生策略中设置 AllocationSize
- reactjs - React ES6 类方法不会渲染到 html 表中,而是在它之外。为什么?
- c# - 在 wpf c# 中使用桌面屏幕显示 MetroDialog 消息
- node.js - 使用passport.js访问用户
- c - 如何使用 STM32 HAL I2C 从 PCT2075 获取温度
- angular - 显示动态嵌套数据
- session - LimeSurvey 在关闭浏览器后删除 cookie