| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Вывести для каждой команды самого молодого игрока |
| Автор: 4epT 11.11.2011, 00:06 |
| Имеется 2 таблицы: team и player. Team: id (ключ) team (название) Player: id (ключ) name (имя) id_team (номер команды в которой он играет) birthdate (день рождения) Запрос должен содержать в себе Имя команды, Имя игрока и дату рождения. Дата рождения должна быть самая маленькая (самый старый) или самая большая (самый молодой). Вроде запрос простой ... без проблем сделал вывод Имя команды и дату, а вот при попытке вывести еще имя игрока ругается ( говорит что по нему нужно делать группировку, а судя по логике запроса группировка должна быть только по команде. Помоги пожалуйста написать данный запрос ) желательно красивый ... друг помог написать, но уже очень сложно ( и решение просто в лоб ... p.s. и был бы признателен, если бы кто то смог дать список задач по sql, штук 100 - 150 задач отсортированные по уровню сложности =) начиная с обычных select и заканчивая очень сложными =) Ну или какие нибудь источники по которым моно было бы очень хорошо подготовиться! |
| Автор: Zloxa 11.11.2011, 10:12 | ||||||
+ поиск по форуму по "бабушкин метод", хотя тут он не нужен
sql-ex.ru |
| Автор: 4epT 11.11.2011, 11:44 |
| В том то и дело что не понятно какую агрегатную функцию можно там применить ... для дня рождения используется min или max. Насчет first сейчас посмотрю ... |
| Автор: 4epT 11.11.2011, 12:14 |
| В том то и дело что не понятно какую агрегатную функцию можно там применить ... для дня рождения используется min или max. Насчет first сейчас посмотрю ... |
| Автор: 4epT 11.11.2011, 13:59 |
| Zloxa, именно такой способ мой друг мне и подсказал =) Скажи пожалуйста, этот запрос самый "красивый" ? по другому не сделаешь ? За сайт спасибо, посмотрю =) |
| Автор: Zloxa 11.11.2011, 15:34 | ||||||
Мне - нравится. row_number вроде как описан в SQL2003 и из года в год больше и больше платформ его потдерживают. Акина подсказал first, гугл подсказал что в ПГ есть что-то подобное, но, похоже это не встроенный аггрегат, а определяемый пользователем. По кр. мере в списке http://www.postgresql.org/docs/9.1/interactive/functions-aggregate.html я его не углядел. Если это так, испльзовать его можно не всегда и не везде. В оракле есть конструкция keep Ее тоже можно использовать для этих целей
но я не знаю, есть ли подобная плюшка в ПГ и держит ли ее вобще ктонить кроме оракла. Можно испльзовать скалярный подзапрос
Такой запрос будет рабоатть на подавляющем большинстве платформ, т.к. опирается на синтаксис стандарта sql98 Можно сделать через join
Этот запрос, тоже опирается на синтаксис sql98, но, в отличии от предыдущих, выведет всех игроков дата рождения которых максимальна. К сожалению, как разрешать такие неоднозначности, в исходной постановке вопроса не указано, а всякий раз спрашивать, уже оскомину набило. наверное еще как-то можно. |
| Автор: Zloxa 11.11.2011, 16:27 | ||
Тоже 98й синтаксис но работать будет чутку по другому нежели предыдущие два запроса, в части нуллов |