Select 数据以及来自另一个 table 的数据计数
Select data with count of data from another table
我有两个 table:“工作”和 'clients'。
clients
table 看起来像这样:
/----+------\
| id | name |
+----+------+
| 1 | Ben |
| 2 | Max |
\----+------/
和 jobs
table:
/----+-----------+--------\
| id | client_id | status |
+----+-----------+--------+
| 1 | 1 | alpha |
| 2 | 1 | beta |
| 3 | 1 | beta |
| 4 | 2 | beta |
\----+-----------+--------/
我想创建一个语句,将 return 客户的名称以及每个状态出现的次数,如下所示:
/------+-------+------\
| name | alpha | beta |
+------+-------+------+
| Ben | 1 | 2 |
| Max | 0 | 1 |
\------+-------+------/
我不要求在没有值的地方有一个 0。
我已经尝试 SELECT name, (SELECT status FROM jobs WHERE client_id = clients.id) FROM clients
但它 return 在子查询中不止一行。
这是一个带有解决方案的示例:http://sqlfiddle.com/#!9/80593/3
create table clients (id int, name varchar(10));
insert into clients values (1, 'Ben'), (2, 'Max');
create table jobs (id int, client_id int, status varchar(10));
insert into jobs values (1, 1, 'alpha'), (2, 1, 'beta'), (3, 1, 'beta'), (4, 2, 'beta');
select
clients.name,
sum(case when jobs.status = 'alpha' then 1 else 0 end) alpha,
sum(case when jobs.status = 'beta' then 1 else 0 end) beta
from jobs
inner join clients
on jobs.client_id = clients.id
group by clients.name;
我有两个 table:“工作”和 'clients'。
clients
table 看起来像这样:
/----+------\
| id | name |
+----+------+
| 1 | Ben |
| 2 | Max |
\----+------/
和 jobs
table:
/----+-----------+--------\
| id | client_id | status |
+----+-----------+--------+
| 1 | 1 | alpha |
| 2 | 1 | beta |
| 3 | 1 | beta |
| 4 | 2 | beta |
\----+-----------+--------/
我想创建一个语句,将 return 客户的名称以及每个状态出现的次数,如下所示:
/------+-------+------\
| name | alpha | beta |
+------+-------+------+
| Ben | 1 | 2 |
| Max | 0 | 1 |
\------+-------+------/
我不要求在没有值的地方有一个 0。
我已经尝试 SELECT name, (SELECT status FROM jobs WHERE client_id = clients.id) FROM clients
但它 return 在子查询中不止一行。
这是一个带有解决方案的示例:http://sqlfiddle.com/#!9/80593/3
create table clients (id int, name varchar(10));
insert into clients values (1, 'Ben'), (2, 'Max');
create table jobs (id int, client_id int, status varchar(10));
insert into jobs values (1, 1, 'alpha'), (2, 1, 'beta'), (3, 1, 'beta'), (4, 2, 'beta');
select
clients.name,
sum(case when jobs.status = 'alpha' then 1 else 0 end) alpha,
sum(case when jobs.status = 'beta' then 1 else 0 end) beta
from jobs
inner join clients
on jobs.client_id = clients.id
group by clients.name;