简体   繁体   English

SQL 查询 max(), count()

[英]SQL query max(), count()

the database schema looks like数据库架构看起来像

employee(employee_name,street,city)雇员(雇员姓名、街道、城市)
works(employee_name,company_name,salary)作品(员工姓名、公司名称、工资)
company(company_name,city)公司(公司名称,城市)
manages(employee_name,manager_name)管理(员工姓名,经理姓名)

the query needed to do is:需要做的查询是:
find the company that has the most employees.找到员工最多的公司。

I could find out the maximum count by the query:我可以通过查询找出最大计数:

SELECT max( cnt ) max_cnt
FROM (

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

But now I can't find out the name of the company.但是现在我找不到公司的名字了。 If anyone has some idea please share.如果有人有一些想法,请分享。

To get the entire row containing the maximum value you can use ORDER BY ... DESC LIMIT 1 instead of MAX :要获取包含最大值的整行,您可以使用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
SELECT company_name,count(*) as cnt 
FROM works 
GROUP BY company_name 
ORDER BY cnt DESC

How about something like:怎么样:

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

Edit:编辑:

Corrected above for MySQL上面更正了 MySQL

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 )

这是工作查询

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

This looks like a course question.这看起来像一个课程问题。

If more than one companies have the same largest number of employees the query with LIMIT doesn't work.如果不止一家公司的员工人数最多,则使用 LIMIT 的查询不起作用。 "ORDER BY" didn't filter out useless info. “ORDER BY”没有过滤掉无用的信息。 Thus we have the following solution因此我们有以下解决方案

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
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);

In Oracle在甲骨文中

    select company_name, count(*) as count 
    from works 
    group by company_name
    having count(*) >= all(select count(*) from works group by company_name)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM