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
3条答案
按热度按时间gcuhipw91#
大概你想要:
笔记:
中所有未聚合的列
SELECT
你在房间里吗GROUP BY
.查询使用表别名,因此更易于编写和读取。
我想一切正常
order_updates
在orders
,所以我改变了left join
到一个inner join
.我已将状态id从
group by
,因为它在不同的行上是不同的。你的多重结果大概是因为
order_updates.id
用于group by
. 我不明白你的意图,也不完全了解数据结构,所以我不知道为什么这是必要的。我可以说,如果你想每一个订单一行,那么我希望orders.id
在这个世界上group by
.yqhsw0fo2#
这些都不是重复的;distinct覆盖整排。示例中的第一行和第三行具有不同的
status_id
价值观。也
有一个独特的和一个小组通常不是一个好主意,如果有的话。
在许多rdbms中不允许使用部分分组by(不包括所有非聚合字段),在最近的mysql版本中默认配置为禁用。如果有一个以上的值
order_updates.order_id
date
,或status_id
同样的道理order_updates.id
,则可以有效地随机选择这些字段遇到的值。pb3skfrl3#
根据您的预期输出,您可以尝试以下方法: