【问题标题】:MySQL Sum ProblemMySQL求和问题
【发布时间】:2011-09-13 02:11:00
【问题描述】:

我有桌子 a 和 b。

  • a 有 order_id 和 ship_total
  • b 有 order_id、item、qty 和 price

我如何查询和获取总数量低于 100 的所有订单的所有 ship_total 的总和?

我担心如果我做这样的事情会出错。

select SUM(ship_total) FROM a as a inner join b as b on a.order_id=b.order_id WHERE SUM(qty) < 100 GROUP BY a.order_id

任何帮助将不胜感激!

我已经尝试了下面的答案,但并没有将所有内容加在一起。它给了我每个订单的运费。

【问题讨论】:

  • 换句话说(与当前的答案列表相反),您真正想要的是所有订单的总计,而不是单个订单的单独总计。
  • @X-Zero 这是正确的。
  • 我之前无意中在我的答案中添加了GROUP BY,但现在已将其删除。给他们一个机会,让我知道他们是否不按照您的意愿行事。

标签: mysql sql sum


【解决方案1】:

一种方式:

SELECT
    SUM(A.ship_total)
FROM
    (SELECT B.order_id FROM B GROUP BY B.order_id HAVING SUM(qty) < 100) SQ
INNER JOIN A ON
    A.order_id = SQ.order_id

另一种方式:

SELECT
    SUM(A.ship_total)
FROM
    A
WHERE
    order_id IN (
        SELECT order_id
        FROM B
        GROUP BY order_id
        HAVING SUM(qty) < 100)

尝试每一个,看看哪个最适合你。

【讨论】:

    【解决方案2】:

    你已经接近了。当您想要限制聚合的结果时,您需要使用HAVING 子句。

    select SUM(ship_total) 
    FROM a as a 
    inner join b as b 
      on a.order_id=b.order_id 
    GROUP BY a.order_id
    having SUM(qty) < 100 
    

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 2021-03-03
      • 1970-01-01
      • 2011-12-24
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多