我有一个表格,我从中选择“项目经理”并提取有关它们的数据。
他们每个人都有许多他们管理的“客户”。
客户端按名称链接到他们的项目经理。
例如:John Smith有3个客户。每个客户都有一个名为“经理”的名字。
以下是该表的简单版本:
name | type | manager
--------------------------------------
John Smith | manager |
Client 1 | client | John Smith
Client 2 | client | John Smith
Client 3 | client | John Smith
John Carry | manager |
Client 4 | client | John Carry
Client 5 | client | John Carry
Client 6 | client | John Carry
如何返回以下数据?
约翰史密斯 - 3个客户
John Carry - 3位客户
答案 0 :(得分:7)
您应该能够使用自联接和count()
聚合函数来获得结果:
select t.name,
count(t1.name) TotalClients
from yourtable t
inner join yourtable t1
on t.name = t1.manager
group by t.name;
如果您希望结果包含Clients
文字,那么您需要CONCAT()
函数:
select t.name,
concat(count(t1.name), ' Clients') TotalClients
from yourtable t
inner join yourtable t1
on t.name = t1.manager
group by t.name;
如果您想根据type
添加WHERE子句,那么您将使用:
select t.name,
concat(count(t1.name), ' Clients') TotalClients
from yourtable t
inner join yourtable t1
on t.name = t1.manager
where t.type = 'manager'
group by t.name
答案 1 :(得分:0)
您不需要在此处加入。一个简单的group by
可以完成这项工作:
Select manager, count(*) as totalClients from yourtable group by 1, order by 2 desc
这将列出所有经理和他们拥有的客户数量。拥有最多客户的经理是第一位的。这样就省略了连接,查询速度会更快。
在from
和group by
之间,您可以添加where
谓词来过滤客户或经理或其他列。
答案 2 :(得分:0)
如果经理可用,
选择count(1),经理 来自Table_Project 按经理分组
如果我没有遗漏任何信息,那么上面的查询应该会产生所需的结果。
答案 3 :(得分:0)
试试这个
select manager, concat(count(*), ' Clients') TotalClients
from yourtable
where manager is not null
group by manager