【问题标题】:SQL query max(), count()SQL 查询 max(), count()
【发布时间】:2011-12-11 13:52:05
【问题描述】:

数据库架构看起来像

员工(员工姓名、街道、城市)
作品(员工姓名、公司名称、薪水)
公司(公司名称,城市)
管理(员工姓名,经理姓名)

需要做的查询是:
找出拥有最多员工的公司。

我可以通过查询找出最大计数:

SELECT max( cnt ) max_cnt
FROM (

SELECT count( employee_name ) cnt, company_name
FROM works
GROUP BY company_name
)w1;

但现在我找不到公司的名称。如果有人有什么想法,请分享。

【问题讨论】:

    标签: mysql sql phpmyadmin rdbms database


    【解决方案1】:

    要获取包含最大值的整行,您可以使用ORDER BY ... DESC LIMIT 1 而不是MAX

    SELECT company_name, cnt
    FROM (
        SELECT company_name, count(employee_name) AS cnt
        FROM works
        GROUP BY company_name
    ) w1
    ORDER BY cnt DESC
    LIMIT 1
    

    【讨论】:

      【解决方案2】:

      比如:

      SELECT count( employee_name ) cnt, company_name
      FROM works
      GROUP BY company_name
      ORDER BY cnt DESC
      LIMIT 1;
      

      编辑:

      上面已针对 MySQL 进行了更正

      【讨论】:

      • 是的 - 在我点击提交后意识到这一点。
      【解决方案3】:
      SELECT company_name,count(*) as cnt 
      FROM works 
      GROUP BY company_name 
      ORDER BY cnt DESC
      

      【讨论】:

        【解决方案4】:
        select company_name 
        from works
        group by company_name
        having count(distinct employee_name)>=all(select count(distinct employee_name)
        from works
        group by company_name )
        

        【讨论】:

          【解决方案5】:

          这是有效的查询

          Select * from(SELECT count(EmpName)cnt, CName FROM works GROUP BY CName Order By cnt desc) where ROWNUM = 1;
          

          【讨论】:

            【解决方案6】:

            这看起来像是一个课程问题。

            如果多个公司的员工人数最多,则使用 LIMIT 的查询不起作用。 “ORDER BY”没有过滤掉无用的信息。因此我们有以下解决方案

            SELECT company_name FROM
            (SELECT company_name, count(employee_name) cnt
                FROM works
                GROUP BY company_name) 
            JOIN 
            (SELECT max(cnt) max_cnt
            FROM (
                SELECT count(employee_name) cnt
                FROM works
                GROUP BY company_name
            )) ON cnt = max_cnt
            

            【讨论】:

              【解决方案7】:
              select company_name from works_for
              group by company_name
              having count(employee_name) = (select max(count(employee_name))from works_for
              group by company_name);
              

              【讨论】:

              • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
              猜你喜欢
              • 2012-12-26
              • 2020-10-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-10-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多