我有两个表如下:
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/