【问题标题】:MySQL SUM all orders by distinct classification of order itemsMySQL SUM 所有订单按订单项的不同分类
【发布时间】:2016-03-29 01:24:50
【问题描述】:

如果我的问题描述性不强,我很抱歉。当我有更好的想法时会更新。

我想创建 SUM 的我的订单总额按其订单项目分类的 SQL。

为了简单起见,我制作了我在此处加载的架构的精简版本:http://sqlfiddle.com/#!9/8eb9a/1。我的表结构:

  • 订单:id、总数
  • order_items:id、order_id、数据

每个订单项目都有一个数据字段,用于将订单项目分类到某个类别。例如,可以是“汽车”、“DSA”、... 或 null。现在我想对每个分类器求和(orders.total)。如果订单项适合“汽车”分类器,我想将订单总数添加到该分类器中。如果订单有另一个项目,例如“DSA”,我想将订单的总数也添加到该分类器中。

我尝试运行此 SQL,但这并不正确,因为如果订单有多个具有相同分类器的订单项目,它会为该分类器添加多个订单的总计(左连接)...

select OI.data, SUM(O.total)
from order_items OI 
left join orders O on O.id=OI.order_id
group by data

我只想将每个订单的订单总额添加到每个不同的订单商品分类中。

您可以在此 SQL Fiddle http://sqlfiddle.com/#!9/8eb9a/1 中查看示例

【问题讨论】:

  • 你能发布一些示例数据和想要的结果吗?
  • 为什么需要LEFT JOINorder_item 可以引用不存在的 order 吗?
  • @Barmar 不,它不能......我已经提到了一些数据的 SQL fiddle......
  • 那么你应该使用INNER JOIN。但我认为这对您的问题没有影响。
  • sqlfiddle 显示数据,但没有显示所需的结果。

标签: mysql join sum


【解决方案1】:

您希望根据您的描述添加不同的行:

select OI.data, SUM(O.total)
from (SELECT DISTINCT order_id,data FROM order_items) OI 
left join orders O on O.id=OI.order_id
group by data;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2016-11-02
    • 1970-01-01
    • 2018-05-09
    相关资源
    最近更新 更多