0

Sql queries are sent to:

SELECT COUNT(*) as success_total,  SUM(AMOUNT) AS success_Amount 
FROM success_log  WHERE TRANSACTION = 'success' 
UNION 
SELECT COUNT(*) as Fail_total, SUM(AMOUNT) AS Fail_Amount 
FROM success_log  WHERE TRANSACTION = 'cancel' 
UNION 
SELECT COUNT(*) as total, SUM(ABS(AMOUNT)) AS Total_Amount 
FROM success_log 

in this result:

enter image description here

but I want result:

enter image description here

How do I send a query to get the results I want?

Community
  • 1
  • 1

3 Answers3

4
SELECT *
FROM 
( SELECT COUNT(*) as success_total,  SUM(AMOUNT) AS success_Amount 
  FROM success_log  WHERE TRANSACTION = 'success' ) t1
CROSS JOIN
( SELECT COUNT(*) as Fail_total, SUM(AMOUNT) AS Fail_Amount 
  FROM success_log  WHERE TRANSACTION = 'cancel' ) t2
CROSS JOIN 
( SELECT COUNT(*) as total, SUM(ABS(AMOUNT)) AS Total_Amount 
  FROM success_log ) t3
Akina
  • 39,301
  • 5
  • 14
  • 25
3

Try this :

SELECT SUM(CASE WHEN TRANSACTION = 'success' THEN 1 ELSE 0 END) AS success_total,
       SUM(CASE WHEN TRANSACTION = 'success' THEN AMOUNT ELSE 0 END) AS success_Amount,
       SUM(CASE WHEN TRANSACTION = 'cancel' THEN 1 ELSE 0 END) AS Fail_total,
       SUM(CASE WHEN TRANSACTION = 'cancel' THEN AMOUNT ELSE 0 END) AS Fail_Amount,
       COUNT(*) AS total, SUM(ABS(AMOUNT)) AS Total_Amount
FROM success_log;

Fiddle : https://www.db-fiddle.com/f/c67eG8snLddicLLWiRSf9N/0

FanoFN
  • 6,815
  • 2
  • 13
  • 33
1

In MySQL you can do aggregation :

SELECT SUM(transaction = 'success') AS success_total,
       SUM(CASE WHEN transaction = 'success' THEN amount ELSE 0 END) AS success_Amount,
       SUM(transaction = 'cancel') AS Fail_total,
       SUM(CASE WHEN transaction = 'cancel' THEN amount ELSE 0 END) AS Fail_Amount,
       COUNT(*) AS total, 
       SUM(ABS(amount)) AS Total_Amount
FROM success_log sl;
Yogesh Sharma
  • 49,870
  • 5
  • 26
  • 52