Reputation: 397
I need to retrieve multiple columns with different condition from the different table. What i have as below
SELECT
(SELECT COUNT(*) FROM Table1 WHERE Price >= 0 Price < 10) AS 'Group1',
(SELECT COUNT(*) FROM Table1 WHERE Price >= 10 AND Price < 20) AS 'Group2',
(SELECT COUNT(*) FROM Table1 WHERE Price >= 20 AND Price < 30) AS 'Group3',
(SELECT COUNT(*) FROM Table2 WHERE Price >= 0 Price < 10) AS 'Group4',
(SELECT COUNT(*) FROM Table2 WHERE Price >= 10 AND Price < 20) AS 'Group5',
(SELECT COUNT(*) FROM Table2 WHERE Price >= 20 AND Price < 30) AS 'Group6'
Just wonder is there any better way to restructure a better query for above condition?
Upvotes: 1
Views: 914
Reputation: 31
Adding up table1 to the above wonderful query by J W.
SELECT SUM(CASE WHEN T1.Price >= 0 Price < 10 THEN 1 END) AS 'Group1',
SUM(CASE WHEN T1.Price >= 10 AND Price < 20 THEN 1 END) AS 'Group2',
SUM(CASE WHEN T1.Price >= 20 AND Price < 30 THEN 1 END) AS 'Group3',
SUM(CASE WHEN T2.Price >= 0 Price < 10 THEN 1 END) AS 'Group4',
SUM(CASE WHEN T2.Price >= 10 AND Price < 20 THEN 1 END) AS 'Group5',
SUM(CASE WHEN T2.Price >= 20 AND Price < 30 THEN 1 END) AS 'Group6'
FROM table1 T1, table2 T2
Upvotes: 2
Reputation: 263683
There is,
SELECT SUM(CASE WHEN Price >= 0 Price < 10 THEN 1 END) AS 'Group1',
SUM(CASE WHEN Price >= 10 AND Price < 20 THEN 1 END) AS 'Group2',
SUM(CASE WHEN Price >= 20 AND Price < 30 THEN 1 END) AS 'Group3',
SUM(CASE WHEN Price >= 0 Price < 10 THEN 1 END) AS 'Group4',
SUM(CASE WHEN Price >= 10 AND Price < 20 THEN 1 END) AS 'Group5',
SUM(CASE WHEN Price >= 20 AND Price < 30 THEN 1 END) AS 'Group6'
FROM table2
Upvotes: 4