sql - 使用 Left Join 和 Where 条件

标签 sql postgresql

我有两个表如下:

order_detail
Fields: order_id, name, total, quantity

order
Fields: id, order_date

对于订单中的每条记录,在 order_detail 中有多个记录。

我希望获得以下结果。

显示按名称分组的总和(总计)和总和(数量),其中 order_date 在 2015 年 3 月 1 日和 2016 年 2 月 29 日之间。在此我只想查看按总数排序的前 10 个项目。我写了以下查询,但我不断收到语法错误:

select od.name, sum(od.total) AS revenue, sum(od.quantity) as quantity FROM order_detail od 
LEFT JOIN order o ON o.id=od.order_id
GROUP BY od.name ORDER BY revenue desc limit 10 
WHERE (o.completed_at)::text >= '3/1/2015' and (o.completed_at)::text <= '2/29/2016'

你能帮我看看正确的语法吗?

最佳答案

您需要将这些条件移动到 JOIN 条件中。将它们放入 where 条件有效地将外部连接更改为内部连接

您也不应该将日期作为字符串进行比较,而是作为日期进行比较:

select od.name, 
       sum(od.total) AS revenue, 
       sum(od.quantity) as quantity 
FROM order_detail od 
   LEFT JOIN order o ON o.id=od.order_id
                    AND o.completed_at >= DATE '2015-03-01'
                    AND o.complated_dat <= DATE '2016-02-29'
GROUP BY od.name 
ORDER BY revenue desc limit 10

关于sql - 使用 Left Join 和 Where 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35848912/

相关文章:

sql - 显示姓名和最大年龄

mysql - 日期存储为文本查询介于和更高之间

postgresql - 将查询结果转换为hstore

sql - 用另一个 json 对象更新 json 列 postgres9.5

python - 具有类似错误 'tuple' 对象的 Django raw() 查询没有属性 'id'

c# - 如何在插入或更新表时检查表中是否已存在行或列

c# - 在 sql 中,存储多个有序向量/列表的最佳方法是什么?

sql - SQL脚本中的Week()函数

regex - 从 Postgresql 中的列中仅获取第一个字母单词

sql - postgres 本地模式限定符