У меня есть таблица с банковскими операциями с столбцами id, tDate, description, cashOut, cashIn.Я хочу посмотреть, как я трачу свои деньги, в частности на Amazon и в магазине под названием 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».
Я хочу, чтобы выбор транзакций для суммирования был взаимоисключающим или что-то в этом роде, чтобы каждая транзакция была частью только одной из вышеприведенных сумм (без использования 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');