SELECT DISTINCT order_updates.order_id as 'order', date,
sum(products.price*amount), status_id
FROM order_updates
LEFT JOIN orders ON orders.id=order_updates.order_id
JOIN order_items ON orders.id = order_items.order_id
JOIN products ON products.id = order_items.id
GROUP by order_updates.id
ORDER BY order_updates.status_id ASC
上面是我使用的SQL代码。但是我一直在重复。 为什么会这样?
order | date | sum(products.price*amount | status_id
------------------------------------------------------------------
1 |2018-10-15 17:45:41|46.80000114440918 |1
2 |2018-10-15 17:45:41|21.800000190734863 |1
1 |2018-10-15 17:45:41|46.80000114440918 |3
我希望此输出:
order | date | sum(products.price*amount | status_id
------------------------------------------------------------------
2 |2018-10-15 17:45:41|21.800000190734863 |1
1 |2018-10-15 17:45:41|46.80000114440918 |3
答案 0 :(得分:3)
这些都不是重复的; DISTINCT覆盖了整行。示例中的第一行和第三行具有不同的status_id
值。
也
order_updates.order_id
date
中的任何一个或同一个status_id
的{{1}}中有多个值,那么您将有效地随机选择这些值遇到的值字段。答案 1 :(得分:1)
根据您的预期输出,您可以尝试以下操作:
Select order, date, tot,max(status_id)
from
(SELECT DISTINCT order_updates.order_id as 'order', date,
sum(products.price*amount) as tot, status_id
FROM order_updates
LEFT JOIN orders ON orders.id=order_updates.order_id
JOIN order_items ON orders.id = order_items.order_id
JOIN products ON products.id = order_items.id
GROUP by order_updates.id
ORDER BY order_updates.status_id ASC
)a
group by order,date, tot
答案 2 :(得分:0)
大概是您想要的:
SELECT o.order_id, o.date, max(status_id),
sum(p.price * oi.amount)
FROM order_updates ou JOIN
orders o
ON o.id = ou.order_id JOIN
order_items oi
ON o.id = oi.order_id JOIN
products p
ON p.id = oi.id
GROUP by o.id, o.date
ORDER BY ou.status_id ASC;
注意:
SELECT
中所有未聚合的列都在GROUP BY
中。order_updates
中的所有顺序都在orders
中,所以我将left join
更改为inner join
。group by
中删除了状态ID,因为在不同的行上它是不同的。大概,您的多个结果是由于order_updates.id
中使用了group by
。我不了解您的意图,也不了解数据结构,所以我不知道为什么这样做是必要的。我可以说,如果您希望每个订单一行,那么我希望orders.id
位于group by
中。