MYSQL一个字段的总和取决于其他字段的值
我正在尝试创建一个字段作为 1.对采购字段求和,其中采购类型的值=作为采购的增值税\u vat 2.将采购类型值=豁免为采购\豁免的采购字段相加 附加图像中的源表和结果表示例 这个怎么样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
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