SQL-запрос max (), count () - PullRequest
       10

SQL-запрос max (), count ()

2 голосов
/ 20 октября 2011

схема базы данных выглядит как

работник (employee_name, улица, город)
работы (employee_name, company_name, зарплата)
Компания (company_name, город)
управляет (employee_name, manager_name)

запрос, который нужно сделать:
найдите компанию с наибольшим количеством сотрудников.

Я мог узнать максимальное количество по запросу:

SELECT max( cnt ) max_cnt
FROM (

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

Но сейчас я не могу узнать название компании. Если у кого-то есть идеи, пожалуйста, поделитесь.

Ответы [ 6 ]

4 голосов
/ 20 октября 2011

Чтобы получить всю строку, содержащую максимальное значение, вы можете использовать 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 голосов
/ 30 октября 2012
SELECT company_name,count(*) as cnt 
FROM works 
GROUP BY company_name 
ORDER BY cnt DESC
2 голосов
/ 20 октября 2011

Как насчет чего-то вроде:

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

Edit:

Исправлено выше для MySQL

1 голос
/ 26 мая 2013
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 )
0 голосов
/ 17 января 2016

Это похоже на вопрос курса.

Если в нескольких компаниях одинаковое наибольшее количество сотрудников, запрос с 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
0 голосов
/ 11 марта 2014

Вот рабочий запрос

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