如何根据另一列对值求和,减去别名
How to sum values depending on another column, substract Aliases
SQL-Noob 这里
有一堆物品,不是买就是卖。
我想按 item-name 分组并得到购买和销售的总和。
我也想计算物品的库存。
我尝试了一个子查询:
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:如何计算商品的Stock?
purchases - sales AS "Stock"
之类的东西似乎不起作用。
非常感谢
使用条件聚合:
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
子句不是必需的,因为 table 中只有那些类型。
旁注:
对文字字符串使用单引号而不是双引号;这是标准 SQL,所有数据库都能理解
在MySQL中,如果需要引用标识符而不是双引号,请使用反引号;或者更好的是,使用不需要引用的标识符
SQL-Noob 这里
有一堆物品,不是买就是卖。
我想按 item-name 分组并得到购买和销售的总和。 我也想计算物品的库存。
我尝试了一个子查询:
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:如何计算商品的Stock?
purchases - sales AS "Stock"
之类的东西似乎不起作用。
非常感谢
使用条件聚合:
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
子句不是必需的,因为 table 中只有那些类型。
旁注:
对文字字符串使用单引号而不是双引号;这是标准 SQL,所有数据库都能理解
在MySQL中,如果需要引用标识符而不是双引号,请使用反引号;或者更好的是,使用不需要引用的标识符