【问题标题】:How to sum values depending on another column, substract Aliases如何根据另一列对值求和,减去别名
【发布时间】:2020-12-20 11:50:38
【问题描述】:

这里是 SQL 新手。

有一堆被购买或出售的物品。

我想按商品名称分组并获得购买和销售的总和。 我也想计算物品的库存。

我尝试了一个子查询:

SELECT NAME,
(
    SELECT SUM(quantity)
    FROM transactions
    WHERE `type` = "Buy") AS "purchases",
(
    SELECT SUM(quantity)
    FROM transactions
    WHERE `type` = "Sell") AS "sales"
FROM transactions
GROUP BY NAME

导致错误值:

之后我尝试了 CASE-Statements

SELECT NAME,
SUM(CASE WHEN `type` = "Buy" THEN quantity END) AS "purchases",
SUM(CASE WHEN `type` = "Sell" THEN quantity END) AS "sales"
FROM transactions
GROUP BY name

哪个有效:

问题一:有没有更好的方法来达到这个结果?

问题2:如何计算商品的库存?

purchases - sales AS "Stock" 之类的东西似乎不起作用。

非常感谢

【问题讨论】:

    标签: mysql sql sum subquery pivot


    【解决方案1】:

    使用条件聚合:

    select name,
        sum(case when type = 'Buy'  then quantity else 0 end) as purchases,
        sum(case when type = 'Sell' then quantity else 0 end) as sales,
        sum(case when type = 'Buy'  then quantity else - quantity end) as stock
    from transactions
    where type in ('Buy', 'Sell')
    group by name
    

    where 子句不是必需的,表中只有这些类型。

    旁注:

    • 对文字字符串使用单引号而不是双引号;这是标准 SQL,所有数据库都能理解

    • 在 MySQL 中,如果您需要引用标识符而不是双引号,请使用反引号;或者更好的是,使用不需要引用的标识符

    【讨论】:

    • 第二行少了一个逗号,mysqlf由于rep,无法编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2021-02-22
    • 2017-04-20
    • 2018-10-12
    • 2016-01-16
    • 2021-12-16
    相关资源
    最近更新 更多