mysql - 如何在 MYSQL 中对 2 个表使用 MAX 和 COUNT 函数

标签 mysql max

我是 MYSQL 的新手,有一个关于在 MYSQL 中同时使用 MAX 和 COUNT 函数的问题。我有2个表worker和分配表,worker的主键是分配表中的外键。

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

我的代码是

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.

请谁能帮助我。

感谢您的期待。

最佳答案

尝试这样的事情:

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。在一个过程中分步骤进行可能会更好。

关于mysql - 如何在 MYSQL 中对 2 个表使用 MAX 和 COUNT 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30201582/

相关文章:

php - 使用PHP的SQL语句问题

r - 根据另一列中的行子集从多列中获取最大值

python - 使用 python 在移动区间上查找最大值(和最小值)

search - Datomic - 选择某些属性最高的实体

max - SPARQL选择计数器的最大值

php - 选择列表菜单回显

MySQL插入触发器同时插入多个

php - mysql从表中获取用户最高出价

mysql - 在有序选择中选择前 3 行

java - Java 标准库中是否有某种方法可以从一组枚举中获取最小的枚举?