Максимальная зарплата сотрудника - PullRequest
0 голосов
/ 06 марта 2020

Мне нужно получить максимальную зарплату в каждом отделе для каждой записи

Ввод:

+-----+-------+-------+-----+
| Eid | Ename | Dname | sal |
+-----+-------+-------+-----+
|   1 | a     | d1    | 100 |
|   2 | b     | d1    | 500 |
|   3 | c     | d2    | 600 |
|   4 | e     | d3    | 700 |
+-----+-------+-------+-----+

Вывод:

+-----+-------+-------+-----+----------+
| Eid | Ename | Dname | sal | max(sal) |
+-----+-------+-------+-----+----------+
|   1 | a     | d1    | 100 |      500 |
|   2 | b     | d1    | 500 |      500 |
|   3 | c     | d2    | 600 |      600 |
|   4 | e     | d3    | 700 |      700 |
+-----+-------+-------+-----+----------+

Как получить вывод, используя sql

1 Ответ

4 голосов
/ 06 марта 2020

С MAX() оконной функцией:

SELECT t.*,
  MAX(t.sal) OVER (PARTITION BY t.Dname) max_sal
FROM tablename t

Если ваша база данных не поддерживает оконные функции:

SELECT t.*, d.max_sal
FROM tablename t INNER JOIN (
  SELECT Dname, MAX(sal) max_sal
  FROM tablename
  GROUP BY Dname
) d ON d.Dname = t.Dname

См. Демонстрационную версию . Результаты:

> eid | ename | dname | sal | max_sal
> --: | :---- | :---- | --: | ------:
>   1 | a     | d1    | 100 |     500
>   2 | b     | d1    | 500 |     500
>   3 | c     | d2    | 600 |     600
>   4 | e     | d3    | 700 |     700
...