MYSQL一个字段的总和取决于其他字段的值

MYSQL一个字段的总和取决于其他字段的值,mysql,where-clause,Mysql,Where Clause,我正在尝试创建一个字段作为 1.对采购字段求和,其中采购类型的值=作为采购的增值税\u vat 2.将采购类型值=豁免为采购\豁免的采购字段相加 附加图像中的源表和结果表示例 这个怎么样 SUM(CASE WHEN purchases_type='vat' THEN Purchases ELSE 0 END) AS purchases_vat, SUM(CASE WHEN purchases_type='exempt' THEN Purchases ELSE 0 END) AS purchase

我正在尝试创建一个字段作为

1.对采购字段求和,其中采购类型的值=作为采购的增值税\u vat

2.将采购类型值=豁免为采购\豁免的采购字段相加

附加图像中的源表和结果表示例

这个怎么样

SUM(CASE WHEN purchases_type='vat' THEN Purchases ELSE 0 END) AS purchases_vat,
SUM(CASE WHEN purchases_type='exempt' THEN Purchases ELSE 0 END) AS purchases_exempt,
两行版本:

SELECT 'vat', SUM(purchases)
FROM source_table
WHERE purchase_type = 'vat4'

UNION

SELECT 'exempt', SUM(purchases)
FROM source_table
WHERE purchase_type = 'exempt';
一行:

SELECT 
    (SELECT sum(purchases) from source_table where purchase_type = 'vat4') purchase_vat,
    (SELECT sum(purchases) from source_table where purchase_type = 'exempt') purchase_exempt;

这将为您提供“增值税”的购买总额。对于“豁免”也可以这样做

SELECT `s` FROM (SELECT SUM(purchases), type FROM my_table GROUP BY type) as T1 WHERE T1.type = 'vat

@SergioTulentsev我已经在SQL Server中测试了你的版本和我的版本,我的更快(两次)。您正在执行两个查询,一个是对
vat4
的值求和,另一个是对
豁免
求和,因此在我看来这是没有效率的。@SergioTulentsev如果您试图说我可以从源表中省略单词
-在我看来这是不可能的,因为您(或MySQL)怎么能这样做知道
purchase\u type
purchases
列在哪里?如果你说的是来自
的关键字
,那么根据它是不可能的(部分:
[来自表\u参考
)。Buuuuuut我现在无法测试它,也许我不知道一些事情。我所知道的是,如果没有来自
,它将无法工作(我已经使用过)在SQL Server中。啊,对不起,我的错。没关系。我不知怎么地认为这是我的代码:-)
select 
    sum(case when purchase_type = 'vat4' then purchases else 0 end) as purchase_vat4,
    sum(case when purchase_type = 'exempt' then purchases else 0 end) as purchase_exempt
from source_table