首页 > 解决方案 > 将公斤和克单位乘以每公斤的价格

问题描述

当我必须计算供应成本的值时,我目前有一项任务,我必须将 priceperweight 与重量相乘。但重量也有公斤和克。当我将它相乘时,结果是 500 克菠菜需要 3000 美元。这是我的计划。请帮忙。所有帮助将不胜感激:D 这是我的代码!太感谢了

select PricePerWeight * Weight from Supplies;

补给品

标签: mysqlmysql-workbenchmysql-error-1064

解决方案


使用以下方法将重量标准化为克或公斤(我将使用克)CASE x WHEN y

SELECT
    s.*,
    CASE s.metric
        WHEN 'Kilos' THEN ( s.weight * 1000 )
        WHEN 'grams' THEN ( s.weight *    1 ) ELSE NULL
    END AS weightInGrams
FROM
    supplies AS s

然后添加额外的单位很简单:

SELECT
    s.*,
    CASE s.metric
        WHEN 'tonnes'  THEN ( s.weight * 1000 * 1000 )
        WHEN 'Kilos'   THEN ( s.weight * 1000 )
        WHEN 'grams'   THEN ( s.weight *    1 )
        WHEN 'jupiter' THEN ( s.weight * 1.9 * POW( 10, 27 ) * 1000 )
        WHEN 'lbs'     THEN ( s.weight * 453.592 ) ELSE NULL
    END AS weightInGrams
FROM
    supplies AS s

假设您使用的是符合 ISO 标准的 SQL,您需要使用外部查询或 CTE 来乘以pricePerWeight,我假设它以 Kg 为单位:

请注意,下面的查询仍然使用克作为质量的基本单位,以避免由整数除法引起的问题(因为 SQL 并不容易确保数字文字被处理为浮点数或小数而不是整数,因为整数除法截断而不是回合)。

最终值是thePrice以下查询中的列:

选项 1:使用外部查询:

SELECT
    s2.*,
    ( s2.pricePerWeight * s2.weightInGrams ) / 1000.00 AS thePrice
FROM
    (
        SELECT
            s.*,
            CASE s.metric
                WHEN 'tonnes'  THEN ( s.weight * 1000 * 1000 )
                WHEN 'Kilos'   THEN ( s.weight * 1000 )
                WHEN 'grams'   THEN ( s.weight *    1 )
                WHEN 'jupiter' THEN ( s.weight * 1.9 * POW( 10, 27 ) * 1000 )
                WHEN 'lbs'     THEN ( s.weight * 453.592 ) ELSE NULL
            END AS weightInGrams
        FROM
            supplies AS s
    )

选项 2:使用 CTE:

WITH s2 AS (
    SELECT
        s.*,
        CASE s.metric
            WHEN 'tonnes'  THEN ( s.weight * 1000 * 1000 )
            WHEN 'Kilos'   THEN ( s.weight * 1000 )
            WHEN 'grams'   THEN ( s.weight *    1 )
            WHEN 'jupiter' THEN ( s.weight * 1.9 * POW( 10, 27 ) * 1000 )
            WHEN 'lbs'     THEN ( s.weight * 453.592 ) ELSE NULL
        END AS weightInGrams
    FROM
        supplies AS s
)
SELECT
    s2.*,
    ( s2.pricePerWeight * s2.weightInGrams ) / 1000.00 AS thePrice
FROM
    s2

推荐阅读