如何根据其销售订单id(MySQL)汇总所有价格

如何根据其销售订单id(MySQL)汇总所有价格,mysql,database,group-by,sum,sql-order-by,Mysql,Database,Group By,Sum,Sql Order By,我正在检索已订购产品的销售记录。我想根据订单id将产品的所有价格相加或求和 我当前的查询如下所示: 问题:当我输入一个总和(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_bas

我正在检索已订购产品的销售记录。我想根据订单id将产品的所有价格相加或求和

我当前的查询如下所示:

问题:当我输入一个总和(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
注意:我想要的输出是根据订单id将所有产品的价格相加。因此,最终输出应该有2行,而不是1行


请帮帮我

您必须指定编译器应如何处理聚合函数中未使用的所有列,即不是
SUM
AVG
MIN
MAX
COUNT
中的一个。在您的情况下,您必须告诉编译器,您希望“每个…的总和…”,因此
按bsb.order\u 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

然后只需在订单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

您缺少了
groupby
子句-您需要告诉MySQL您希望如何对聚合数据进行分组!使用聚合函数aka COUNT()SUM()MAX()MIN()时,只需添加一个groupby
groupby bsb.ORDER\u ID
作为注释即可。。。等等,我们只使用SUM(),因为。。SUM告诉mysql获取所有行并在特定列中将它们“求和”。如果您不通过添加组。。然后它将合并所有行。。。GROUP BY告诉mysql,您希望对另一列(即orderstry)的特定数据求和,并提供一些解释,而不仅仅是一个解决方案,OP不需要将其作为子查询,因此您也应该将其删除感谢paubo的回答:)