当前位置: 首页 > 知识库问答 >
问题:

MYSQL-一个表中多个列的总和除以另一个表中的一行

徐嘉勋
2023-03-14

我有两个表用于我的在线订单:product\u items

产品项包含销售价格、数量和成本价格。订单表包括成本、装运和货币

我想获得所有订单(按货币分组)的所有销售价格(*数量)和成本价格(*数量)以及成本装运的总和

问题是,当我将成本加起来时,订单中每个项目的成本加起来(因为它们是合并的)

因此,如果订单1有2个项目,运费为10欧元,那么它将退回20欧元。

如果我不加运费,那么我只得到最后一个值

SELECT 
    currency, 
    SUM(`cost_price` * qty), 
    SUM(`selling_price` * qty), 
    SUM(cost_shipping) 
FROM `product_items` 
INNER JOIN `orders` ON `3xm_orders_new`.id = `3xm_item_sales_new`.order_id 
WHERE `date` >= '2020-02-01' AND `date` < '2020-03-01' 
GROUP BY currency

我需要这些值来计算订单的保证金。

关于如何实现这一点,有什么建议吗?

提前谢谢

TempPeck

共有1个答案

姜聪
2023-03-14

您需要先在子查询中汇总每个订单的成本和价格,然后将其与订单合并,并按货币汇总:

SELECT 
    o.currency, 
    SUM(p.cost_price) sum_cost_price,
    SUM(p.selling_price) sum_selling_price,
    SUM(cost_shipping) sum_cost_shipping
FROM (
    SELECT 
        order_id,
        SUM(cost_price * qty) cost_price, 
        SUM(selling_price * qty) selling_price, 
    FROM product_items 
    GROUP BY order_id
) p
INNER JOIN orders o ON o.id = p.order_id 
WHERE o.date >= '2020-02-01' AND o.date < '2020-03-01' 
GROUP BY o.currency

附带说明:

>

始终使用查询中的每一列所属的表来限定查询中的每一列;这使得遵循逻辑更加容易;我为每一列添加了限定符(我必须做一些假设,即date列)

通常,您应该避免在每个表和列名周围使用反勾号;只有当标识符包含特殊字符时才需要它们,这里不是这种情况

原始查询中的表名存在差异;我使用了你在问题中描述的那些

 类似资料:
  • 问题内容: 我正在尝试根据另一个MySQL信息更新一个MySQL表。 我的桌子看起来像: 而表如下所示: 我想更新在与来自基于(存储在字符串字段)。 希望更新后的表如下所示: 我有一个有效的查询,但是非常慢: 这使我的CPU耗尽,最终导致超时,并且仅执行了一部分更新(有数千个要匹配的值)。我知道匹配的速度会很慢,但这是我必须将它们匹配在一起的唯一数据。 有没有更好的方法来更新这样的值?如果可以更快

  • 问题内容: 我已经阅读了很多有关如何更新多列的文章,但仍然找不到正确的答案。 我有一张桌子,我想从另一张桌子更新这张桌子。 如果我只运行select语句(在方括号之间),则脚本返回值,但无法使用update 问题答案: TSQL不支持行值构造函数。改用这个:

  • 我正在从远程数据库读取一组行,从本地数据库读取一组类似的行,然后使用RemoveAll删除本地已经存在的远程行。。。 但这对我来说似乎不对。当我真正需要做的只是检查是否存在匹配项时,我认为我不应该计算事物。我尝试了和的各种用法,但得到了废话。我不能使用(如这里建议的),因为列表元素不是同一类型。 有更好的方法吗?

  • 问题内容: 我有一个表,其中包含商店中每件商品的单价和其他详细信息。 另一个包含每个订单中包含的项目的详细信息。 现在我要计算 请注意,我希望它成为表本身的一部分,而不是作为其他视图或查询。我怎样才能做到这一点?我为此研究了触发器和其他机制,但是它们是否适用于不同表中的值,尤其是在存在此类约束的情况下? 我尝试过根据另一列计算出的Column进行以下触发吗?: 但这似乎没有用 问题答案: 这是如何

  • 问题内容: 包含(和)中也存在的两个元素。 有没有一种干净的方法来确保其中不包含这些元素或其中可能已经存在的任何其他重叠元素? 问题答案: 这将使您只包含。

  • 问题内容: 我有2个表,一个包含我需要的最终结果,另一个包含我需要根据设定级别选择的列列表。 例如 : 所以,如果我做以下 然后,基本上我需要使用此select语句中的列名来确定从另一条语句中选择了哪些列。 香港专业教育学院尝试过的方法,我当然知道这是错的,但可以让我对我试图做的事情有所了解。 我试图以一种动态方式构建一个sql查询,该查询可以通过我放在表中的任何列进行更改。 从理论上讲,这应与以