Reputation: 3004
I have two table like
1) Customer
id | name
------+-------------------
1 | xyz1
2 | xyz2
3 | xyz3
4 | xyz4
5 | xyz5
2) Products
id | name | customer | state
------+-------------+----------+-------
1 | product 1 | 1 |Shipped
2 | product 2 | 1 |Pending
3 | product 3 | 1 |Shipped
4 | product 4 | 1 |Pending
5 | product 5 | 2 |Shipped
I want to have a query Something like :
SELECT name from customer, SELECT count(*) from products where state='SHIPPED', SELECT count(*) from product where state='PENDING' for all developers
which yields below mentioned result :
name | count_shipped | count_pending
-------+---------------+---------------
xyz1 | 2 | 2
xyz2 | 1 | 0
xyz3 | 0 | 0
xyz4 | 0 | 0
xyz5 | 0 | 0
Upvotes: 0
Views: 48
Reputation: 33945
You can also use COUNT...
SELECT c.name
, COUNT(CASE WHEN state = 'shipped' THEN 'foo' END) count_shipped
, COUNT(CASE WHEN state = 'pending' THEN 'foo' END) count_pending
FROM customer c
LEFT
JOIN products p
ON p.customer = c.id
GROUP
BY c.id;
Upvotes: 0
Reputation:
select c.name,
sum(case when p.state = 'Pending' then 1 else 0 end) as count_pending,
sum(case when p.state = 'Shipped' then 1 else 0 end) as count_shipped
from customer c
left join products p on p.customer = c.id
group by name;
Upvotes: 2
Reputation: 19882
SELECT
c.id ,
c.name ,
SUM(IF p.state = 'Shipped',1,0) AS count_shipped,
SUM(IF p.state = 'Pending',1,0) AS count_pending
FROM Customer AS c
LEFT JOIN Products AS p ON p.customer = c.id
GROUP BY c.id
Upvotes: 0