我與列編號,tDate,描述,退幣,卡希銀行交易表中的多個時間相加行。我想看看我怎麼花我的錢,特別是在亞馬遜和一個叫梅佐店,所以我想這樣的結果:SQL避免根據LIKE表達
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查詢是,「梅佐」 -transactions總和是錯誤的,因爲它也增加了「亞馬遜」的交易。
我想要的交易選擇,總結相互排斥或類似的東西,使每一筆交易只以上的款項之一的一部分(而不是訴諸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');
正是我需要的,非常感謝! (至於第二個建議,我不會這樣做,因爲我需要知道每個搜索關鍵字每個月的總和。) –