0
我有兩個表如下:使用左聯接隨着Where條件
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'
你能幫我用正確的語法嗎?
你'WHERE'需要在你的'GROUP BY之前' – DanK
如果您在'JOIN'ed表中的列中包含檢查,那麼您可以將該'LEFT JOIN'有效地轉換爲'INNER JOIN',因此您可以使用'INNER JOIN'並將這些條件移入'JOIN'子句。 (有一些例外通常涉及檢查NULL值 –
在GROUP確實解決錯誤之前移動WHERE,但它會產生一個空表。 – asanas