Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Работа Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Sql 2 Таблицы  [new]
Bad_Сoder
Member

Откуда:
Сообщений: 10
Нужно из 2 таблиц, где названия полей совпадают, из столбцов(с одинаковыми названиями) выбрать наибольшее значение и соответствующее ему значение первого столбца(тоже совпадает)

Таблица А
Имя |Зарплата
______________
Вася |300
______________
Коля |200
______________

Таблица В
Имя |Зарплата
______________
Аня |400
______________
Оля |100
______________

Должно выдать

Имя |Зарплата
_______________
Аня |400
13 сен 17, 10:46    [20792108]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 544
Вариантов дохрена. Если я правильно понял тупо выбрать чувака/чувиху с больше зп из двух таблиц.
13 сен 17, 10:48    [20792113]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Bad_Сoder
Member

Откуда:
Сообщений: 10
new_igor,

SELECT Max(Премия) AS Выражение1
FROM
(SELECT Max(Сотрудники.Премия) AS Премия
FROM сотрудники
UNION
SELECT Max(Начальники.Премия) AS Премия1 FROM начальники) AS Премия

Не могу добиться, чтобы было и число, и сумма
13 сен 17, 10:52    [20792122]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Dshedoo
Member

Откуда:
Сообщений: 76
Bad_Сoder,

Есть 2 таблицы с премиями: сотрудники и начальники.
Нужно найти человека из этих 2х таблиц, который получил наибольшую премию.
Я правильно понимаю?
13 сен 17, 10:55    [20792134]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 119
Bad_Сoder,

SELECT *
FROM TableA
WHERE Зарплата IN (SELECT MAX(Зарплата) FROM TableA UNION SELECT MAX(Зарплата) FROM TableB)
UNION ALL
SELECT *
FROM TableB
WHERE Зарплата IN (SELECT MAX(Зарплата) FROM TableA UNION SELECT MAX(Зарплата) FROM TableB)
13 сен 17, 10:57    [20792139]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 544
Bad_Сoder,

SELECT Премия.Имя, Премия.Премия
FROM
Премия.Премия = (SELECT Max(Сотрудники.Премия) AS Премия
FROM сотрудники
UNION
SELECT Max(Начальники.Премия) AS Премия1 FROM начальники) AS Премия
13 сен 17, 10:58    [20792144]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 544
stomsky
Bad_Сoder,

SELECT *
FROM TableA
WHERE Зарплата IN (SELECT MAX(Зарплата) FROM TableA UNION SELECT MAX(Зарплата) FROM TableB)
UNION ALL
SELECT *
FROM TableB
WHERE Зарплата IN (SELECT MAX(Зарплата) FROM TableA UNION SELECT MAX(Зарплата) FROM TableB)


Ну да, во человек оперативно сработал
13 сен 17, 10:58    [20792146]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 119
Bad_Сoder,
А, нет, поправка. Нужен еще один уровень сложенности:
SELECT *
FROM TableA
WHERE Зарплата IN (SELECT MAX(Зарплата) FROM (SELECT Зарплата FROM TableA UNION SELECT Зарплата FROM TableB))
UNION ALL
SELECT *
FROM TableB
WHERE Зарплата IN (SELECT MAX(Зарплата) FROM (SELECT Зарплата FROM TableA UNION SELECT Зарплата FROM TableB))
13 сен 17, 11:00    [20792151]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Bad_Сoder
Member

Откуда:
Сообщений: 10
Dshedoo,да, правильно, нужно вывести наибольшую премию и человека, который ее получил
Картинка с другого сайта.

Картинка с другого сайта.
13 сен 17, 11:03    [20792160]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 119
Bad_Сoder
Dshedoo,да, правильно, нужно вывести наибольшую премию и человека, который ее получил

Тогда в предложенном мной выше запросе замените слово "Зарплата" на слово "Премия".
PS. А в первоначальной постановке задачи все-таки "Зарплата" было ))))
13 сен 17, 11:05    [20792166]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Bad_Сoder
Member

Откуда:
Сообщений: 10
new_igor, спасибо
13 сен 17, 11:05    [20792169]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 544
База "офигительно" спроектирована. Зачем две таблицы.... Начальники они не сотрудники что ли. )))
13 сен 17, 11:06    [20792173]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Bad_Сoder
Member

Откуда:
Сообщений: 10
stomsky, хотелось упростить постановку вопроса) спасибо большое
13 сен 17, 11:06    [20792174]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Bad_Сoder
Member

Откуда:
Сообщений: 10
new_igor, это задание по учебе, так тркбуют "свыше"
13 сен 17, 11:08    [20792180]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 119
new_igor
SELECT Премия.Имя, Премия.Премия
FROM
Премия.Премия = (SELECT Max(Сотрудники.Премия) AS Премия
FROM сотрудники
UNION
SELECT Max(Начальники.Премия) AS Премия1 FROM начальники) AS Премия

По-моему, не пойдет (я такую же ошибку допустил).
Здесь вот этот код:
SELECT Max(Сотрудники.Премия) AS Премия
FROM сотрудники
UNION
SELECT Max(Начальники.Премия) AS Премия1 
FROM начальники

выведет два максимальных значения значения премии: по одному максимальному для каждой таблицы.
А, если я правильно понял задачу, надо выявить общий максимум для обеих таблиц.
Т.е. сначала надо сделать UNION таблиц, и потом из объединенной таблицы выбирать MAX(Премия).
13 сен 17, 11:10    [20792184]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 544
stomsky
По-моему, не пойдет (я такую же ошибку допустил).


Я не проверял, скорее всего. Но человеку помогло и ладно. )
13 сен 17, 11:11    [20792188]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Dshedoo
Member

Откуда:
Сообщений: 76
with q as (
  select * from table1
  union all
  select * from table2)
, w as (
  select max(премия) as премия from q)
select q.* from q join w on q.премия = w.премия
13 сен 17, 11:15    [20792200]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3259
Dshedoo
Bad_Сoder,

Есть 2 таблицы с премиями: сотрудники и начальники.
Нужно найти человека из этих 2х таблиц, который получил наибольшую премию.
Я правильно понимаю?

....и уволить
13 сен 17, 11:22    [20792228]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Bad_Сoder
Member

Откуда:
Сообщений: 10
Всем спасибо, все получилось
13 сен 17, 11:22    [20792230]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Smegrant
Member

Откуда: Brisbane, QLD
Сообщений: 125
Bad_Сoder
Нужно из 2 таблиц, где названия полей совпадают, из столбцов(с одинаковыми названиями) выбрать наибольшее значение и соответствующее ему значение первого столбца(тоже совпадает)

Таблица А
Имя |Зарплата
______________
Вася |300
______________
Коля |200
______________

Таблица В
Имя |Зарплата
______________
Аня |400
______________
Оля |100
______________

Должно выдать

Имя |Зарплата
_______________
Аня |400


А почему у Ани самая большая зарплата? Что она такого делает, чего не делает Оля?
13 сен 17, 12:23    [20792407]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Dmitry V. Liseev
Member

Откуда: Санкт-Петербург
Сообщений: 5171
Bad_Сoder
Всем спасибо, все получилось
Не понял слово "спасибо" на форуме "работа". Куда смотрят модераторы?
13 сен 17, 14:14    [20792834]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Smegrant
Member

Откуда: Brisbane, QLD
Сообщений: 125
Dmitry V. Liseev
Bad_Сoder
Всем спасибо, все получилось
Не понял слово "спасибо" на форуме "работа". Куда смотрят модераторы?


Кстати, индусы в Австралии задают примерно такие же вопросы. Типа как загрузить Excel теблицу в таблиу SQL Server. Индусы не в курсе секретной команды BULK INSERT, это специальная русская команда, только для свидетелей Путина.
13 сен 17, 14:57    [20792973]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
Dmitry V. Liseev
Member

Откуда: Санкт-Петербург
Сообщений: 5171
Как-то не люблю я такие подзапросы. Два раза таблицу сканировать. Я бы пронумеровал в порядке падения зарплат с помощью ROW_NUMBER(), а потом выбрал одного с номером 1. Правда, если будут несколько с одинаковой, то повезёт кому-то одному.
13 сен 17, 15:26    [20793083]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 119
Dmitry V. Liseev
Как-то не люблю я такие подзапросы. Два раза таблицу сканировать.

Согласен, но учитывая, что структура базы вообще дурацкая, потому что
Bad_Сoder
это задание по учебе, так тркбуют "свыше"

то в качестве решения учебной задачи сойдет.
А на практике, я бы скорее через переменную задачу решил.
Сначала в переменной сохранить значение MAX(Премия), а потом уже сделать два объединенных SETECT-а по данному размеру премии.
Решение Dshedoo, конечно, красивее, но у меня мозг к таким конструкциям не привычен. Поэтому читать их могу, а вот сам такое родить - сложнее )))
13 сен 17, 15:53    [20793157]     Ответить | Цитировать Сообщить модератору
 Re: Sql 2 Таблицы  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6102
Dmitry V. Liseev
Как-то не люблю я такие подзапросы. Два раза таблицу сканировать. Я бы пронумеровал в порядке падения зарплат с помощью ROW_NUMBER(), а потом выбрал одного с номером 1. Правда, если будут несколько с одинаковой, то повезёт кому-то одному.

нет там вместо row_number есть похожая аналит. функция, которая может несколько 1 выдавать... но сама идея правильная
13 сен 17, 15:54    [20793160]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Работа Ответить