如何在2个表的MYSQL中使用MAX和COUNT函数

时间:2015-05-12 21:16:57

标签: mysql max

我是MYSQL的新手,对MYSQL中MAX和COUNT函数的使用有疑问。我有2个表工作者和赋值,而worker的主键是赋值表中的外键。

我需要显示员工姓名和身份以及分配给他的总分配,并且只显示分配最多的人员,即分配最多的员工。

我的代码是

SELECT worker.Wrk_ID, worker.Wrk_LastName, MAX(a.count_id)
FROM worker,
    (SELECT COUNT(assignment.Wrk_ID) as count_ID 
        FROM worker, assignment 
        WHERE worker.Wrk_ID = assignment.Wrk_ID 
        GROUP BY worker.Wrk_ID)as a
GROUP BY worker.Wrk_ID;

代码给出错误号。 #1054。

请任何人帮助我。

在期待中感谢你。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

SELECT worker.Wrk_ID, worker.Wrk_LastName, S.Count
FROM worker 
JOIN
(SELECT Wrk_ID, COUNT(*) AS Count FROM Assignments 
GROUP BY Wrk_Id ORDER BY COUNT(*) DESC LIMIT 1) S
ON worker.Wrk_ID = S.Wrk_ID

如果您想要按其总分配排序的员工列表:

SELECT w.WrkID, w.Wrk_LastName, COUNT(*) AS Assignments
FROM work w left join Assignments a
ON w.WrkID=a.WrkID
GROUP BY w.WrkID 
ORDER BY COUNT(*) DESC;

允许多个获胜者:

SELECT s.*, w.Wrk_Lastname FROM 
(
  SELECT  wrk_id , COUNT(*) AS tot_assignments 
  FROM Assignments 
  GROUP BY wrk_id 
  HAVING COUNT(*) = 
  (
   SELECT MAX(tot) FROM 
   (
     SELECT COUNT(*) AS TOT FROM Assignments GROUP BY wrk_id
    ) counts
  ) 
) winners  
INNER JOIN worker w ON s.wrk_id = w.wrk_id;

它可能很慢,因为它有多个GROUP BY。在程序中的分开步骤中执行此操作可能会更好。