Вывести вторую максимальную зарплату работников sql

Содержание
  1. Как написать SQL-запрос, чтобы найти максимальную и минимальную зарплату вместе с именем сотрудника в Oracle
  2. 5 ответов
  3. демонстрация
  4. Найти максимальную и вторую максимальную зарплату для таблицы сотрудников MySQL
  5. ОТВЕТЫ
  6. Ответ 1
  7. Ответ 2
  8. Ответ 3
  9. Ответ 4
  10. Ответ 5
  11. Ответ 6
  12. Ответ 7
  13. Ответ 8
  14. Ответ 9
  15. Ответ 10
  16. Ответ 11
  17. Ответ 12
  18. Ответ 13
  19. Ответ 14
  20. Ответ 15
  21. Ответ 16
  22. Ответ 17
  23. Ответ 18
  24. Ответ 19
  25. Ответ 20
  26. Ответ 21
  27. Ответ 22
  28. Ответ 23
  29. Ответ 24
  30. Ответ 25
  31. Ответ 26
  32. Ответ 27
  33. Ответ 28
  34. Ответ 29
  35. Ответ 30
  36. 5 вопросов по SQL, которые часто задают дата-сайентистам на собеседованиях
  37. Вопрос №1: второе место по зарплате
  38. ▍Решение А: использование IFNULL и OFFSET
  39. ▍Решение B: использование MAX
  40. Вопрос №2: дублирующиеся адреса электронной почты
  41. ▍Решение А: COUNT в подзапросе
  42. ▍Решение B: выражение HAVING
  43. Вопрос №3: растущая температура
  44. ▍Решение: DATEDIFF
  45. Вопрос №4: самая высокая зарплата в подразделении
  46. ▍Решение: команда IN
  47. Вопрос №5: пересаживание учеников
  48. ▍Решение: использование оператора WHEN
  49. Итоги
  50. Найти максимальную и вторую максимальную зарплату для таблицы сотрудников MySQL
  51. 30 ответов

Как написать SQL-запрос, чтобы найти максимальную и минимальную зарплату вместе с именем сотрудника в Oracle

У меня есть один рабочий стол. Пожалуйста, найдите ниже структуру таблицы вместе с данными.

Я хочу найти максимальную зарплату и минимальную зарплату вместе с именем сотрудника.

Ожидаемый результат будет:

Чтобы узнать максимальную зарплату вместе с именем сотрудника, я написал этот запрос:

И чтобы узнать минимальную зарплату вместе с именем сотрудника, я написал этот запрос:

Но я не могу объединить эти два запроса.

Может кто-нибудь подсказать мне, как построить SQL-запрос, который будет возвращать максимальную и минимальную зарплаты вместе с именем сотрудника?

5 ответов

Вот один из способов, используя RANK . Этот ответ делает один проход в CTE, чтобы найти самые низкие и самые высокие зарплаты в таблице сотрудников. Затем он запрашивает только один раз, чтобы получить полностью соответствующие записи.

демонстрация

Если вы хотите, чтобы все возвращалось в одной записи, сделайте это:

Это помещает оба ваших запроса в выражения общих таблиц (CTE, по сути, действуют как свои собственные таблицы, к которым можно обращаться). Затем он соединяет их по произвольно истинному 1 = 1. Затем вы просто выбираете четыре значения.

Вы также можете использовать self-join alike логику запроса

Если вы кодируете, как говорите , вы получаете , чтобы получить всех сотрудников с зарплатой [ IN ] min (оклад) или max (оклад) :

Важно определить индекс по зарплате

Запрос делает два индекса доступа, чтобы получить минимальное и максимальное значения — строки 7 и 9 в плане ниже. После использования этих выбранных значений NESTED LOOPS выполняется с доступом к индексу salary и доступом к таблице по ROWID.

Обратите внимание, что эта оптимизация требует, чтобы было только несколько строк с экстремальными зарплатами (что является нормальным случаем — по крайней мере для MAX 😉

Источник

Найти максимальную и вторую максимальную зарплату для таблицы сотрудников MySQL

Предположим, вам предоставлена ​​следующая простая таблица базы данных, называемая Employee, которая имеет 2 столбца с именем Employee ID и Salary:

Я хочу написать запрос select max (зарплата) как max_salary, 2nd_max_salary от сотрудника

то он должен возвращать

Я знаю, как найти вторую высшую зарплату

но я не могу понять, как объединить эти 2 результата для желаемого результата

ОТВЕТЫ

Ответ 1

Вы можете просто запустить 2 запроса в качестве внутренних запросов, чтобы вернуть 2 столбца:

Ответ 2

(или)

Попробуйте это, n будет n-м элементом, который вы хотите вернуть

Ответ 3

Лучшее и простое решение: —

Ответ 4

Самый простой способ получить вторую максимальную зарплату и n-я зарплату

Ответ 5

Вы можете написать 2 подзапроса, подобных этому примеру

Ответ 6

Ответ 7

Я думаю, что простой способ в оракуле таков:

Ответ 8

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

Ответ 9

Ответ 10

Вы можете написать SQL-запрос в любой из ваших любимых баз данных, например. MySQL, Microsoft SQL Server или Oracle. Вы также можете использовать функцию, специфичную для базы данных, например. TOP, LIMIT или ROW_NUMBER, чтобы написать SQL-запрос, но вы также должны предоставить общее решение, которое должно работать со всей базой данных. Фактически, есть несколько способов найти вторую самую высокую зарплату, и вы должны знать пару из них, например. в MySQL без использования ключевого слова LIMIT в SQL Server без использования TOP и в Oracle без использования RANK и ROWNUM.

Общий запрос SQL:

Другое решение, использующее sub-запрос вместо предложения NOT IN. Он использует оператор .

Ответ 11

Найти максимальную заработную плату сотрудника

Выберите MAX (Зарплата) от Employee

Найти вторую самую высокую зарплату

Выберите MAX (Зарплата) от Employee Если зарплата не включена (выберите MAX (Зарплата) от сотрудника)

SELECT MAX (Зарплата) от сотрудника ГДЕ Зарплата (выберите MAX (Зарплата) от Сотрудника)

Ответ 12

Я думаю, что это самый простой способ найти MAX и вторую MAX зарплату. Вы можете попробовать этот путь.

Ответ 13

Не очень хороший запрос, но:

Ответ 14

Для уникальных зарплат (то есть сначала не может быть таким же, как и у второго):

А также потому, что это такой ненужный способ решить эту проблему (может ли кто-нибудь сказать 2 строки вместо 2 столбцов, LOL?)

Ответ 15

Ответ 16

Для второй высшей зарплаты это работает для меня:

Ответ 17

Это потрясающий запрос, чтобы найти n-й максимум: Например: —

Вы хотите найти зарплату 8-я рядовая зарплата, просто изменили индексированное значение на 8.

Предположим, что у вас есть 100 строк с зарплатой. Теперь вы хотите найти максимальную зарплату за 90-ю строку. Просто изменил индексированное значение на 90.

Ответ 18

с общим выражением таблицы

Ответ 19

без вложенного запроса

Ответ 20

Здесь измените значение n согласно вашему требованию:

Ответ 21

Это должно работать так же:

Ответ 22

Возможно, этот запрос работает. Найдите N-й наивысший номер оклада. Что я узнал от г-на Кудвенката.

Ответ 23

Если мы хотим найти Employee, который получает 3-ей самую высокую зарплату, выполните этот запрос

Ответ 24

Это будет работать. Чтобы найти n-е максимальное число

Для пятого наибольшего числа

Ответ 25

select e.salary from( SELECT * FROM Employee group by salary order by salary desc limit 2 ) e order by salary asc limit 1;

Ответ 26

Вот еще одно решение, которое использует вспомогательный запрос, но вместо предложения IN оно использует

Ответ 27

попробуйте приведенный выше код.

если вы хотите получить третью максимальную запись, добавьте еще один вложенный запрос «выберите max (sal) из emp» внутри скобки последнего запроса и дайте меньше оператора перед ним.

Ответ 28

Ответ 29

Макс. зарплата:

Вторая максимальная зарплата:

Ответ 30

сначала найдите самую высокую зарплату затем вычесть все салаиты из высшей зарплаты найти минимум среди них вычесть минимальный размер, полученный из наивысшей зарплаты полученный результат — вторая самая высокая зарплата Я не знаю запрос, но логика верна.

Источник

5 вопросов по SQL, которые часто задают дата-сайентистам на собеседованиях

Хотя составление SQL-запросов — это не самое интересное в работе дата-сайентистов, хорошее понимание SQL чрезвычайно важно для того, кто хочет преуспеть в любом занятии, связанном с обработкой данных. Дело тут в том, что SQL — это не только SELECT , FROM и WHERE . Чем больше SQL-конструкций знает специалист — тем легче ему будет создавать запросы на получение из баз данных всего, что ему может понадобиться.

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

  1. Изучение механизмов, которые выходят за пределы базового знания SQL.
  2. Рассмотрение нескольких практических задач по работе с SQL.

В статье рассмотрено 5 вопросов по SQL, взятых с Leetcode. Они представляют собой практические задачи, которые часто встречаются на собеседованиях.

Вопрос №1: второе место по зарплате

Напишите SQL-запрос для получения из таблицы со сведениями о заработной плате сотрудников ( Employee ) записи, содержащей вторую по размеру заработную плату.

Например, такой запрос, выполненный для таблицы, представленной ниже, должен вернуть 200 . Если в таблице нет значения, меньшего, чем самая высокая зарплата — запрос должен вернуть null .

▍Решение А: использование IFNULL и OFFSET

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

  • IFNULL(expression, alt) : эта функция возвращает свой аргумент expression в том случае, если он не равен null . В противном случае возвращается аргумент alt . Мы воспользуемся этой функцией для того чтобы возвратить null в том случае, если в таблице не окажется искомого значения.
  • OFFSET : этот оператор используется с выражением ORDER BY для того чтобы отбросить первые n строк. Это нам пригодится по той причине, что нас интересует вторая строка результата (то есть — вторая по величине зарплата, данные о которой есть в таблице).

Вот — готовый запрос:

▍Решение B: использование MAX

В запросе, представленном ниже, используется функция MAX . Здесь выбирается самое большое значение заработной платы, не равное максимальной заработной плате, полученной по всей таблице. В результате мы и получаем то, что нам нужно — вторую по величине заработную плату.

Вопрос №2: дублирующиеся адреса электронной почты

Напишите SQL-запрос, который обнаружит в таблице Person все дублирующиеся адреса электронной почты.

▍Решение А: COUNT в подзапросе

Сначала мы создаём подзапрос, в котором выясняется частота появления каждого адреса в таблице. Затем результат, возвращаемый подзапросом, фильтруется с использованием инструкции WHERE count > 1 . Запрос вернёт сведения об адресах, встречающихся в исходной таблице больше одного раза.

▍Решение B: выражение HAVING

  • HAVING : это выражение, которое позволяет использовать инструкцию WHERE вместе с выражением GROUP BY .

Вопрос №3: растущая температура

Напишите SQL-запрос, который находит в таблице Weather все даты (идентификаторы дат), когда температура была бы выше температуры на предшествующие им даты. То есть, нас интересуют даты, в которые «сегодняшняя» температура выше «вчерашней».

▍Решение: DATEDIFF

  • DATEDIFF : эта функция вычисляет разницу между двумя датами. Она используется для того, чтобы обеспечить сравнение именно «сегодняшних» и «вчерашних» температур.

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

Вопрос №4: самая высокая зарплата в подразделении

В таблице Employee хранятся сведения о сотрудниках компании. В каждой записи этой таблицы содержатся сведения об идентификаторе ( Id ) сотрудника, о его имени ( Name ), о зарплате ( Salary ) и о подразделении компании, где он работает ( Department ).

В таблице Department содержатся сведения о подразделениях компании.

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

▍Решение: команда IN

Команда IN позволяет задавать в инструкции WHERE условия, соответствующие использованию нескольких команд OR . Например, две следующие конструкции идентичны:

Здесь мы хотим получить таблицу, содержащую название подразделения ( Department ), имя сотрудника ( Employee ) и его заработную плату ( Salary ). Для этого мы формируем таблицу, в которой содержатся сведения об идентификаторе подразделения ( DepartmentID ) и о максимальной зарплате по этому подразделению. Далее мы объединяем две таблицы по условию, в соответствии с которым записи в результирующую таблицу попадают только в том случае, если DepartmentID и Salary есть в ранее сформированной таблице.

Вопрос №5: пересаживание учеников

Мэри — учительница в средней школе. У неё есть таблица seat , хранящая имена учеников и сведениях об их местах в классе. Значение id в этой таблице постоянно возрастает. Мэри хочет поменять местами соседних учеников.

Вот таблица исходного размещения учеников:

Вот что должно получиться после пересаживания соседних учеников:

Напишите запрос, который позволит учительнице решить вышеописанную задачу.

Обратите внимание на то, что если количество учеников является нечётным — последнего ученика никуда пересаживать не надо.

▍Решение: использование оператора WHEN

SQL-конструкцию CASE WHEN THEN можно рассматривать как оператор if в программировании.

В нашем случае первый оператор WHEN используется для проверки того, назначен ли последней строке в таблице нечётный идентификатор. Если это так — строка не подвергается изменениям. Второй оператор WHEN отвечает за добавление 1 к каждому нечётному идентификатору (например — 1, 3, 5 превращается в 2, 4, 6) и за вычитание 1 из каждого чётного идентификатора (2, 4, 6 превращаются в 1, 3, 5).

Итоги

Мы разобрали несколько задач по SQL, попутно обсудив некоторые продвинутые средства, которые можно использовать при составлении SQL-запросов. Надеемся, то, что вы сегодня узнали, пригодится вам при прохождении собеседований по SQL и окажется полезным в повседневной работе.

P.S. В нашем маркетплейсе есть Docker-образ с SQL Server Express, который устанавливается в один клик. Вы можете проверить работу контейнеров на VPS. Всем новым клиентам бесплатно предоставляются 3 дня для тестирования.

Уважаемые читатели! Что вы можете посоветовать тем, кто хочет освоить искусство создания SQL-запросов?

Источник

Найти максимальную и вторую максимальную зарплату для таблицы сотрудников MySQL

предположим, что вам дана следующая простая таблица базы данных под названием Employee, которая имеет 2 столбца с именем Employee ID и Salary:

Я хочу написать запрос выберите max (зарплата) как max_salary, 2nd_max_salary от сотрудника

тогда он должен вернуться

Я знаю, как найти 2-й высокая заработная плата

но я не могу понять, как присоединиться к этим 2 результатам для желаемый результат

30 ответов

вы можете просто запустить 2 запроса в качестве внутренних запросов, чтобы вернуть 2 столбца:

попробуйте вот так

(или)

попробуйте это, n будет n-й элемент, который вы хотели бы вернуть

самый простой способ получить вторую максимальную зарплату & nth зарплату

лучшее и простое решение: —

вы можете написать 2 подзапроса, как в этом примере

Я думаю, это самый простой способ найти MAX и второй MAX зарплату.Можете попробовать так.

Я думаю, что простой способ в oracle таков:

для максимальной зарплаты просто мы можем использовать функцию max, но вторая максимальная зарплата мы должны использовать sub-запрос. в sub query мы можем использовать условие where для проверки второй максимальной зарплаты или просто использовать limit.

вы можете написать SQL-запрос в любой из ваших любимых баз данных, например,MySQL, Microsoft SQL Server или Oracle. Вы также можете использовать функцию базы данных, например TOP, LIMIT или ROW_NUMBER для написания SQL-запроса, но вы также должны предоставить общее решение, которое должно работать со всей базой данных. На самом деле, есть несколько способов найти вторую по величине зарплату, и вы должны знать пару из них, например, в MySQL без использования ограничения ключевое слово в SQL Сервер без использования TOP и в Oracle без использования ранг и ROWNUM.

общий SQL запрос:

другое решение, которое использует суб-запрос вместо предложения NOT IN. Он использует оператора.

найти максимальную зарплату сотрудника

выберите MAX (зарплата) от сотрудника

Найти Вторую По Величине Зарплату

выберите MAX (зарплата) от сотрудника Где зарплата не в (выберите MAX (зарплата) от сотрудника)

выберите MAX (зарплата) от сотрудника Где зарплата (выберите MAX (зарплата) от сотрудника)

Не очень хороший запрос, но :

для уникальных зарплаты (т. е. первый не может быть таким же, как второй):

а также потому, что это такой ненужный способ решить эту проблему (может ли кто-нибудь сказать 2 строки вместо 2 столбцов, LOL?)

для второй по величине зарплаты, эта работа для меня:

Это удивительный запрос, чтобы найти N-й максимум: Например: —

вы хотите найти зарплату 8-й строки зарплаты, просто изменили индексированное значение на 8.

Предположим, у вас есть 100 строк с зарплаты. Теперь вы хотите найти максимальную зарплату для 90-го ряда. Просто изменил индексированное значение на 90.

Источник

Читайте также:  Как отмыть зеленку с ковра если она впиталась
Оцените статью