我尝试使用 select min(select count()) 但它不起作用

时间:2021-06-09 05:41:32

标签: mysql sql count min

我想要房间里有最少的 emp 但它不起作用

enter image description here

这是来源:

https://github.com/kamenrider1604/testSQL.git

非常感谢!!

3 个答案:

答案 0 :(得分:1)

使用

SELECT COUNT(..) AS `count`, ..
FROM ..
ORDER BY `count` ASC LIMIT 1

答案 1 :(得分:0)

我认为这对你有用

SELECT departments.dep_id, 
       dep_name, 
       dep_address, 
       dep_phone, 
       COUNT(employee.dep_id) 
FROM   employees, 
       departments 
WHERE  employees.dep_id = departments.dep_id 
GROUP  BY employee.dep_id 
HAVING COUNT(employee.dep_id) = (SELECT MIN(min_dep.min) 
                                 FROM   (SELECT COUNT(employees.dep_id) 
                                         FROM   employees 
                                         GROUP  BY employees.dep_id) AS min_dep) 
; 

答案 2 :(得分:0)

  SELECT MIN(SELECT COUNT(dep_id) FROM employees GROUP BY dep_id) FROM employees 

这个子查询不正确。 您不能从员工中选择 min()。如果要查找 min('count'),则需要从子查询中进行选择:

SELECT MIN (count) FROM (SELECT COUNT (dep_id) AS count FROM employees GROUP BY dep_id)

*如果子查询中只有表名,则不必在其中指定表名。

你的问题在这里没有真正的帮助。因为还有其他更简单的方法可以实现您在问题中提出的问题,例如 @Akina 的答案,但是,通过查看您的代码,您似乎正在尝试完成一些不同的事情。如果以上不是您想要做的,那么我只能想到另一件事:

SELECT *
  FROM (SELECT a.*, MIN (dep_count) OVER () dep_count_min
          FROM (SELECT departments.dep_id,
                       dep_name,
                       dep_address,
                       dep_phone,
                       COUNT (employee.dep_id)
                           OVER (PARTITION BY employee.dep_id)
                           AS dep_count
                  FROM employees, departments
                 WHERE employees.dep_id = departments.dep_id) a) b
 WHERE a.dep_count = b.dep_count_min

*我还没有在MySql上工作,所以以上所有内容都在Oracle中实现了。我认为基本SQL不会有太大区别,但是如果有任何问题,您可以尝试编写上述查询的MySql版本。 希望对你有帮助。