【问题标题】:Returning sum of group of rows with each row返回每行的行组总和
【发布时间】:2012-08-02 19:37:45
【问题描述】:

是否可以返回满足选择条件的行的列值的总和,不仅针对每个单独的行,而且针对满足相同条件的多个组?

例如,考虑:

id  order_id    quantity
1   1           1
2   1           3
3   1           5
4   2           2
5   2           4

什么 MySQL SELECT 查询可以返回以下结果:

id  order_id    quantity    order_sum
1   1           1           9
2   1           3           9
3   1           5           9
4   2           2           6
5   2           4           6

编辑: 后续问题:假设结果是由具有多个条件的查询产生的,那么这些条件在最终查询中将如何处理?

【问题讨论】:

  • 您需要 order_sum 实际上是一列吗?
  • 在大多数其他现代 DBMS 中,您可以使用分析函数来执行此操作。 MySQL 缺少 SUM() 分析函数,因此 Andomar 对子查询进行自连接的答案似乎是下一个最佳选择。

标签: mysql sql


【解决方案1】:

您可以在“from”子句中使用子查询:

select  t.*, tsum.sumquantity
from t join
     (select t.orderid, sum(quantity) as sumquantity
      from t
      group by t.order_id
     ) tsum
     on t.orderid = tsum.orderid

将它放在“from”子句中的好处是可以有多个变量。例如,您可以添加订单数量、最大数量、恰好 1 个数量出现的次数等等。

【讨论】:

  • 我想使用相同的东西,比如同一日期的数据总和。是否可以使用相同的东西,因为它对所有人都有不同的 id。我也想对表中的所有列使用 sum。
  • @DaminiSuthar 。 . . 问一个问题,具体说明您的问题。您已经很好地开始了这个过程,通过研究看看是否有相关的问题可以使用。
【解决方案2】:

您可以使用子查询:

select  *
,       (
        select  sum(quantity)
        from    YourTable yt2
        where   yt2.order_id = yt1.order_id
        ) as order_sum
from    YourTable yt1

【讨论】:

    【解决方案3】:

    您需要有一个子查询来计算每个quantitySUM Order_ID

    SELECT  a.*, b.order_sum
    FROM    myTable a INNER JOIN
                (
                    SELECT order_ID, 
                           SUM(quantity) order_sum
                    FROM    myTable
                    GROUP BY order_ID
                ) b on a.order_ID = b.order_ID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2021-05-23
      • 2011-10-12
      • 1970-01-01
      相关资源
      最近更新 更多