【问题标题】:Multiply kg and grams unit with price per kg将公斤和克单位乘以每公斤的价格
【发布时间】:2021-02-23 02:51:06
【问题描述】:

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

select PricePerWeight * Weight from Supplies;

【问题讨论】:

  • 在整个过程中使用相同的单位会更有效

标签: mysql mysql-workbench mysql-error-1064


【解决方案1】:

使用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

然后添加additional units 很简单:

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

【讨论】:

  • 试试这个 -> 从耗材中选择 PricePerWeight * (CASE s.metric WHEN 'Kilos' THEN (s.weight * 1000)WHEN 'grams' THEN (s.weight*1) ELSE 0 END)作为 s;
  • @pisi1001 我手头没有 MySQL 实例来测试它。会发生什么?
  • @Dai试试linkdb-fiddle.com很有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2022-08-06
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多