我有一张银行交易表,其中包含 id、tDate、description、cashOut、cashIn 列。我想看看我是如何花钱的,特别是在亚马逊和一家名为 Mazo 的商店,所以我想要这样的结果:
Month Amazon Mazo Total
1 100 200 300
我试过这个:
SELECT
MONTH(tDate) AS Month,
SUM(IF(description LIKE '%amazon%',cashOut,0)) AS Amazon,
SUM(IF(description LIKE '%mazo%',cashOut,0)) AS Mazo,
SUM(cashOut) AS Total
FROM `transactions`
GROUP BY Month
但是,我得到了以下信息:
Month Amazon Mazo Total
1 100 300 300
这个 SQL 查询的问题是“mazo”事务的总和是错误的,因为它也将“amazon”事务相加。
我希望交易的选择总和是互斥的或类似的东西,以便每个交易只是上述 SUM 之一的一部分(不诉诸 PHP 或类似的东西)。(我的表格包含比这更多的数据,而且我有很多搜索条件,所以使用 '% mazo %' 作为搜索词是不够的。我需要一个通用的解决方案。)
有人有建议吗?
表格及其数据的详细信息:
CREATE TABLE `transactions` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tDate` date NOT NULL,
`description` varchar(200) NOT NULL,
`cashOut` decimal(10,0) NOT NULL,
`cashIn` decimal(10,0) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
INSERT INTO `transactions` (`id`, `tDate`, `description`, `cashOut`, `cashIn`) VALUES
(1, '2010-01-05', 'amazon', '100', '0'),
(4, '2010-01-15', 'mazo', '200', '0');