SQL - получить значение MIN для строки и проверить, чтобы это значение MIN было в строке как минимум 2 раза - PullRequest
1 голос
/ 15 апреля 2020

То, чего я пытаюсь добиться, это:
1) Получите минимальное значение оклада в таблице для каждого отдела.
2) Если это минимальное значение существует в Таблица не менее два раз для каждого отдела, а затем показать его идентификатор отдела.

Пример:

column1 name  salary department_id
id1     John1 10000  1
id2     John2 10000  1
id3     John3 30000  2
id4     John4 30000  2
id5     John5 50000  3
id6     John6 20000  4

Результат:

department_id
1
2

Ответы [ 3 ]

1 голос
/ 15 апреля 2020

Если я правильно понимаю, вам нужны отделы, где минимальная зарплата выпадает как минимум вдвое. Это заставляет меня думать об оконных функциях:

select t.department_id
from (select t.*,
             count(*) over (partition by department_id, salary) as cnt,
             row_number() over (partition by department_id order by salary) as seqnum
      from t
     ) t
where seqnum = 1 and cnt > 1;

Обратите внимание, что вам не нужно select distinct, потому что это выбирает не более одной строки на отдел.

1 голос
/ 15 апреля 2020

Если я следил за вами правильно, вам нужны отделы, в которых более одного сотрудника имеют самую низкую зарплату.

Вот подход, использующий оконные функции, который работает путем сравнения row_number() и rank():

select distinct department_id
from (
    select 
        t.*, 
        row_number() over(partition by department_id order by salary) rn,
        rank()       over(partition by department_id order by salary) rnk
    from mytable t
) t
where rnk = 1 and rn > 1
0 голосов
/ 15 апреля 2020
    SELECT department_id
      FROM Employee
     WHERE Employee.salary = (select min(emp.salary) from Employee emp where emp.department_id = Employee.department_id) 
  GROUP BY department_id
    HAVING COUNT(1) >=2
...