从另一个表中选择具有数据计数的数据[重复]
Posted
技术标签:
【中文标题】从另一个表中选择具有数据计数的数据[重复]【英文标题】:Select data with count of data from another table [duplicate] 【发布时间】:2015-12-07 02:32:45 【问题描述】:我有两个表:“jobs”和“clients”。
clients
表如下所示:
/----+------\
| id | name |
+----+------+
| 1 | Ben |
| 2 | Max |
\----+------/
还有jobs
表:
/----+-----------+--------\
| id | client_id | status |
+----+-----------+--------+
| 1 | 1 | alpha |
| 2 | 1 | beta |
| 3 | 1 | beta |
| 4 | 2 | beta |
\----+-----------+--------/
我希望创建一个语句,该语句将返回客户端的名称以及每个状态出现的次数,如下所示:
/------+-------+------\
| name | alpha | beta |
+------+-------+------+
| Ben | 1 | 2 |
| Max | 0 | 1 |
\------+-------+------/
我不要求在不存在任何值的情况下存在 0。
我试过SELECT name, (SELECT status FROM jobs WHERE client_id = clients.id) FROM clients
,但它在子查询中返回不止一行。
【问题讨论】:
【参考方案1】:这是一个解决方案示例: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;
【讨论】:
恕我直言,您可以从答案中删除CREATE
和 INSERT
语句。他们在你的小提琴中。但没有必要把它作为答案的一部分。以上是关于从另一个表中选择具有数据计数的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何获取表中的所有数据,如果在一列中重复相同的值,该行应该计数一次?