-- create CREATE TABLE Transactions ( id int , country varchar (3), state varchar (10), amount int, trans_date date ); -- insert INSERT INTO Transactions(id,country,state,amount,trans_date) VALUES (121, 'US', 'approved',1000,'2018-12-18'); INSERT INTO Transactions(id,country,state,amount,trans_date) VALUES (122, 'US', 'declined',2000,'2018-12-19'); INSERT INTO Transactions(id,country,state,amount,trans_date) VALUES (123, 'US', 'approved',2000,'2019-01-01'); INSERT INTO Transactions(id,country,state,amount,trans_date) VALUES (124, 'DE', 'approved',2000,'2019-01-07'); -- fetch SELECT * FROM Transactions; /*+------+---------+----------+--------+------------+ | id | country | state | amount | trans_date | +------+---------+----------+--------+------------+ | 121 | US | approved | 1000 | 2018-12-18 | | 122 | US | declined | 2000 | 2018-12-19 | | 123 | US | approved | 2000 | 2019-01-01 | | 124 | DE | approved | 2000 | 2019-01-07 | +------+---------+----------+--------+------------+ Output: +----------+---------+-------------+----------------+--------------------+-----------------------+ | month | country | trans_count | approved_count | trans_total_amount | approved_total_amount | +----------+---------+-------------+----------------+--------------------+-----------------------+ | 2018-12 | US | 2 | 1 | 3000 | 1000 | | 2019-01 | US | 1 | 1 | 2000 | 2000 | | 2019-01 | DE | 1 | 1 | 2000 | 2000 | +----------+---------+-------------+----------------+---------------- */ SELECT CONCAT(YEAR(trans_date),'-',MONTH(trans_date)) AS MONTH, COUNTRY, COUNT(STATE), SUM(CASE WHEN STATE='approved' THEN 1 ELSE 0 END) AS approved_count, SUM(amount) AS trans_total_amount, SUM(CASE WHEN STATE='approved' THEN amount ELSE 0 END) AS approved_total_amount FROM Transactions GROUP BY CONCAT(YEAR(trans_date),'-',MONTH(trans_date)),COUNTRY ORDER BY MONTH,COUNTRY DESC