【问题标题】:Get SELECT * WHERE {certain parameters are met} but is blocked by the WHERE statmentGet SELECT * WHERE {certain parameters are met} 但被 WHERE 语句阻塞
【发布时间】:2020-07-19 04:36:41
【问题描述】:

标题可能有点误导,但我不确定如何措辞。

我遇到了一个问题,我需要返回下属最多的经理的详细信息。

例如,当前表格是这样设置的。

我目前正在运行此查询以查找 {manager} 以及 {manager} 已分配给员工的次数:

SELECT *, count(manager) AS managercount FROM employee GROUP BY manager ORDER BY managercountb DESC LIMIT 1;

结果: 经理:101 经理人数:4

但是,我需要找到一种方法来通过员工 ID 显示经理的所有详细信息。

我已尝试输入“WHERE manager = employeeid”,但由于没有员工是他们自己的经理,因此不会返回任何内容。

我需要有关如何根据拥有最多员工的经理来包含所有列的建议。

【问题讨论】:

  • 您了解联接吗?你可以尝试自己加入表,现在想想……
  • DESC 实际上是ORDER BY 语句的一部分,与LIMIT 无关。你确定你知道语法吗?
  • 我对语法不是 100% 有信心,但我的主要关注点是如果获得员工最多的经理的详细信息。谢谢你让我知道。

标签: mysql sequelpro


【解决方案1】:

您需要实现自连接,即与自身连接表。 实际上我没有你的表结构,但我试图给你粗略的查询结构。您的查询将类似于下面给出的查询。查看结构并尝试了解层次结构。

    select Emp.employeeid, Emp.firstname, Emp.lastname, 
    Emp.job, Emp.manager, Emp.hired, Temp.mcount
    from Employee Emp inner join 
        (select employeeid, count(manager) as mcount from employee
        group by manager order by count(manager) desc limit 1) Temp 
   on Emp.employeeid = Temp.employeeid;

【讨论】:

  • 我希望这个答案可能有助于您获得解决方案。如果您认为这篇文章有帮助,请点击正确的勾号将其标记为答案。单击后,它将变为绿色,表示您将此帖子标记为答案。谢谢!
  • 感谢您的回复,这很好,但不幸的是,这将为 mcount 列中的所有单元格分配最大值,我希望有一个唯一的计数,您有什么想法吗?我当前的无限制查询将返回唯一的 mcount 值,但会将这些值分配给错误的员工。
  • @SLHEFC1928 请立即查看
  • 请注意,没有人使用 RIGHT JOIN,这里也没有笛卡尔积
  • 感谢@strawberry 改成内联
猜你喜欢
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2010-12-07
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
相关资源
最近更新 更多