从另一个表中选择具有数据计数的数据[重复]

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;

【讨论】:

恕我直言,您可以从答案中删除 CREATEINSERT 语句。他们在你的小提琴中。但没有必要把它作为答案的一部分。

以上是关于从另一个表中选择具有数据计数的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从具有相同值的两个表中选择数据后结果重复

如何使用消除重复的联接从另一个表中插入一个表[重复]

如何获取表中的所有数据,如果在一列中重复相同的值,该行应该计数一次?

mysql php从2个表中选择字段,具有相同的字段名称[重复]

从另一个表中选择 * 以及计数/总和

Oracle SQL:从一个表中选择一个计数,从另一个表中使用子查询缩小选择范围