我有一个看起来像这样的员工表
employeenumber int(11) PK
lastname varchar(50)
firstname varchar(50)
还有一个看起来像这样的客户表
customernumber int(11) PK
salesrepemployeenumber int(11)
creditlimit double
如何找到大多数客户的员工?我知道我必须查询客户表中的salesrepemployeenumber列,以找出哪个员工的客户数最多,最大?然后我需要返回员工编号和全名。
解决办法是什么???
加入两个表,按雇员表的主键对它们进行分组,然后按降序计数结果,得到第一个结果(得到最多结果)
select employee.salesrepemployeenumber, employee.lastname, employee.firstname, count(*) as result
from employee
join customer
on employee.employeenumber = customer.salesrepemployeenumber
group by employeenumber
order by count(*) desc limit 0, 1;
使用加入/计数/组:
SELECT
employees.employeenumber, -- employee id
employees.lastname, -- sample employee name
COUNT(customers.customernumber) AS customer_count -- the number of customers
FROM employees
LEFT OUTER JOIN customers -- I'm using a left join so we can see people with 0 as well
-- get some shorter column names man
ON customers.salesrepemployeenumber = employees.employeenumber
GROUP BY employees.employeenumber
简而言之,您选择所有员工,然后将它们与客户表的结果合并,然后按员工的ID对其进行分组。通过在COUNT
操作期间使用GROUP BY
,我们可以计算特定组的不同条目的数量。
从那里开始,选择结果中的最大值是一个问题,就像使用LIMIT
/ ORDER BY
一样简单。
SELECT ...
ORDER BY customer_count DESC
LIMIT 1