Запросить список отделов, в которых работает больше сотрудников, чем в определенном отделе - PullRequest
0 голосов
/ 20 марта 2020

База данных, которая у меня есть:

emp(empno, ename, job , mgr, hiredate, sal, comm, deptno)
dept(deptno, dname, loc)

, и я пытаюсь найти отделы, в которых количество сотрудников превышает количество отделов «Операции»

в таблице отделов:

------------------------------
deptno | dname      | loc
------------------------------
10     | Accounting | New York
20     | Research   | Dallas
30     | Sales      | Chicago
40     | Operations | Boston

Я пытался

SELECT `DNAME` FROM dept HAVING COUNT(*) > (
SELECT COUNT(*) AS Employees, `DNAME`
FROM emp INNER JOIN dept
ON emp.DEPTNO = dept.DEPTNO
WHERE dept.DEPTNO=40
GROUP BY DNAME)

Но я получаю сообщение об ошибке:

#4078 - Illegal parameter data types bigint and row for operation '>'

Ответы [ 3 ]

1 голос
/ 20 марта 2020

Вам нужен подзапрос:

SELECT COUNT(*) AS Employees, d.`DNAME`
FROM emp e INNER JOIN 
     dept d
     ON e.DEPTNO = d.DEPTNO
GROUP BY d.`DNAME`
HAVING COUNT(*) > ( SELECT COUNT(*) 
                    FROM emp AS e1  
                    WHERE e1.DEPTNO = 40
                  )
1 голос
/ 20 марта 2020

having требуется предложение group by. Кроме того, подзапрос должен возвращать только один столбец, и ему не нужно использовать таблицу dept.

. Учитывайте:

select d.dname 
from dept d
inner join emp e on e.deptno = d.deptno
group by d.dptno, d.dname
having count(*) > (select count(*) from emp e where e.deptno = 40)
0 голосов
/ 20 марта 2020

Попробуйте это:

SELECT `DNAME` FROM dept GROUP BY `DNAME` HAVING COUNT(*) > (
SELECT COUNT(*) AS Employees, `DNAME`
FROM emp INNER JOIN dept
ON emp.DEPTNO = dept.DEPTNO
WHERE dept.DEPTNO=40)
...