【问题标题】:How can I SUM up all prices according to its sales_order_id (MySQL) [duplicate]我如何根据其sales_order_id(MySQL)总结所有价格[重复]
【发布时间】:2014-08-19 22:09:02
【问题描述】:

我正在检索 销售记录及其订购的产品。我想根据其 order_id 对 product_price 的所有相加或求和

我当前的查询如下所示:

问题:当我输入 SUM(bsb.PRICE) 时,MySql 正在合并所有产品价格。

这是我使用的查询:

SELECT * FROM (

SELECT bsb.ORDER_ID AS order_id, bsd.PRICE AS shipping_total, SUM(bsb.PRICE) AS product_price, '' AS order_total
FROM b_sale_basket bsb
INNER JOIN b_sale_order bso ON bso.ID = bsb. ORDER_ID
INNER JOIN b_sale_delivery bsd ON bso.DELIVERY_ID = bsd.ID
INNER JOIN b_sale_pay_system bsps ON bso.PAY_SYSTEM_ID = bsps.ID
WHERE bsb.ORDER_ID IN (255, 300)

) sales_order

注意:我想要的输出是根据其 order_id 对所有 product_price 求和。所以最终输出应该有 2 行而不是 1 行

请帮帮我……

【问题讨论】:

  • 你错过了GROUP BY 子句 - 你需要告诉 MySQL 你想如何对聚合数据进行分组!
  • 只需添加group by bsb.ORDER_ID的群组
  • 就像你使用聚合函数时的一个注释,也就是 COUNT() SUM() MAX() MIN()... 等等。让我们只使用 SUM(),因为你是...... mysql 获取所有行并将它们“汇总”到特定列上。如果您不添加 GROUP BY.. 那么它将合并所有行... GROUP BY 告诉 mysql 您要对特定于另一列的数据求和,即您的订单

标签: mysql database group-by sum sql-order-by


【解决方案1】:

您必须指定编译器应如何处理所有未在聚合函数中使用的列,即不是SUMAVGMINMAXCOUNT 之一.在你的情况下,你必须说编译器,你想要“对于每个......总和......”,所以GROUP BY bsb.order_id

SELECT bsb.ORDER_ID AS order_id, SUM(bsb.PRICE) AS product_price, '' AS order_total
FROM b_sale_basket bsb
INNER JOIN b_sale_order bso ON bso.ID = bsb. ORDER_ID
INNER JOIN b_sale_delivery bsd ON bso.DELIVERY_ID = bsd.ID
INNER JOIN b_sale_pay_system bsps ON bso.PAY_SYSTEM_ID = bsps.ID
WHERE bsb.ORDER_ID IN (255, 300)
GROUP BY bsb.ORDER_ID

【讨论】:

  • 尝试提供一些解释,而不仅仅是一个解决方案
  • 并且 OP 不需要将其作为子查询,因此您也应该将其删除
  • 感谢 paubo 的回答 :)
【解决方案2】:

然后只需在订单 id 上使用 group by,这将告诉 MySQL 你想如何聚合你的值:

SELECT 
  bsb.ORDER_ID AS order_id, 
  bsd.PRICE AS shipping_total, 
  SUM(bsb.PRICE) AS product_price, 
  '' AS order_total
FROM b_sale_basket bsb
INNER JOIN b_sale_order bso ON bso.ID = bsb. ORDER_ID
INNER JOIN b_sale_delivery bsd ON bso.DELIVERY_ID = bsd.ID
INNER JOIN b_sale_pay_system bsps ON bso.PAY_SYSTEM_ID = bsps.ID
WHERE bsb.ORDER_ID IN (255, 300)
GROUP BY bsb.ORDER_ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多