Вопрос:

выберите имена отделов, у которых более 2 сотрудников, чья зарплата превышает 1000

sql

99821 просмотра

8 ответа

26 Репутация автора

Как бы сделать следующее в SQL

"Выберите имена отделов, у которых более 2 сотрудников, чья зарплата превышает 1000"?

DeptId DeptName
------ --------
1          one
2          two
3        three

EmpId DeptId Salary
----- ------ ------
121      1    2000
122      1    2000
123      1    5000
124      1    4000
131      2    2000
132      2    6000
133      2    1000
134      2    1000
125      3    1000
126      3   20000


RESULT: one
Автор: Anshul Источник Размещён: 10.01.2011 11:06

Ответы (8)


12 плюса

2553 Репутация автора

Решение

Как насчет этого?

SELECT D.DeptName FROM
Department D WHERE (SELECT COUNT(*) 
                    FROM Employee E 
                    WHERE E.DeptID = D.DeptID AND
                            E.Salary > 1000) > 2
Автор: John Petrak Размещён: 10.01.2011 11:17

2 плюса

6970 Репутация автора

select min(DEPARTMENT.DeptName) as deptname 
from DEPARTMENT
inner join employee on
DEPARTMENT.DeptId = employee.DeptId
where Salary > 1000
group by (EmpId) having count(EmpId) > =2 
Автор: Pankaj Agarwal Размещён: 10.01.2011 11:25

-2 плюса

44967 Репутация автора

Мой главный совет - избегать HAVINGоговорки (см. Ниже):

WITH HighEarners AS
     ( SELECT EmpId, DeptId
         FROM EMPLOYEE
        WHERE Salary > 1000 ), 
     DeptmentHighEarnerTallies AS 
     ( SELECT DeptId, COUNT(*) AS HighEarnerTally
         FROM HighEarners
        GROUP 
           BY DeptId )
SELECT DeptName
  FROM DEPARTMENT NATURAL JOIN DeptmentHighEarnerTallies
 WHERE HighEarnerTally > 2;

В самых ранних реализациях SQL отсутствовали производные таблицы, и это HAVINGбыл обходной путь для одного из его наиболее очевидных недостатков (как выбрать результат из функции set из SELECTпредложения). Как только производные таблицы стали чем-то единым, необходимость HAVINGисчезла. К сожалению, HAVINGсам по себе не ушел (и никогда не будет), потому что ничего не удаляется из стандартного SQL. Нет необходимости учиться, HAVINGи я призываю начинающих кодеров избегать использования этого исторического похмелья.

Автор: onedaywhen Размещён: 10.01.2011 02:31

1 плюс

11 Репутация автора

надеюсь это поможет

select DeptName from DEPARTMENT inner join EMPLOYEE using (DeptId) where Salary>1000 group by DeptName having count(*)>2
Автор: user763822 Размещён: 21.05.2011 09:03

0 плюса

1 Репутация автора

select deptname from dept_1
where exists
(
SELECT DeptId,COUNT(*)        
FROM emp_1  
where salary>1000
and emp_1.deptid=dept_1.deptid   
GROUP BY DeptId 
having count(*)>2)
Автор: Deepak Varshney Размещён: 14.09.2011 06:52

4 плюса

41 Репутация автора

SELECT DEPTNAME
FROM(SELECT D.DEPTNAME,COUNT(EMPID) AS TOTEMP
     FROM DEPT AS D,EMPLOYEE AS E
     WHERE D.DEPTID=E.DEPTID AND SALARY>1000
     GROUP BY D.DEPTID
     )
WHERE TOTEMP>2;
Автор: D23 Размещён: 20.10.2012 07:25

0 плюса

79 Репутация автора

select D.DeptName from [Department] D where D.DeptID in 
( 
    select E.DeptId from [Employee] E
    where E.Salary > 1000
    group by E.DeptId
    having count(*) > 2
)
Автор: Pankaj Singh Размещён: 26.08.2014 09:45

0 плюса

1 Репутация автора

1: список всех сотрудников, которые зарабатывают более RS.100000 в год.

2: укажите имя сотрудника, который зарабатывает, возглавляет отдел, где сотрудник с идентификатором сотрудника

Автор: UMAIR SHAH Размещён: 15.03.2016 07:09
Вопросы из категории :
32x32