![]() |
|
Модераторы: LSD |
![]()
|
|
| andrey_pst |
|
||||||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 37 Регистрация: 24.4.2003 Где: Пермь Репутация: нет Всего: 1 |
Я не силен в SQL, кому не трудно помогите составить запрос:
Ситуация следующая: Есть 2 таблицы - Автор и Книга:
Нужно определить авторов, написавших наибольшее количество книг. Я так это все понимаю: нужно подсчитать количество книг для каждого автора (например, так:
Потом, исходя из результатов этого запроса (по результатам B.COD_AUTOR) выбрать из таблицы AUTOR значения полей FAMILY, FIRST_NAME, LAST_NAME. В результате на экран надо вывести что-то вроде этого:
Вот только никак не пойму, как все эти действия запихать в один SQL-запрос (причем использовать только средства ANSI). |
||||||
|
|||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Не уверен что min сработает для строк в любой СУБД, но в остальном так.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| andrey_pst |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 37 Регистрация: 24.4.2003 Где: Пермь Репутация: нет Всего: 1 |
to LSD - огромное спасибо, работает
репутацию, к сожалению, вам поднять не могу - не хватает постов. |
|||
|
||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 3 Всего: 21 |
LSD
А зачем здесь функция min? Вот так тоже вроде работает
Если, конечно, полных тезок-однофамильцев не предвидится. Конкатенация не обязательна. -------------------- Хотите поговорить об этом? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Я пробовал в Oracle не работает. Если я ничего не путаю, то при наличии group by в selecte можно указывать только столбцы которые присутсвуют в group by или агрегатные функции. Пожалуйста
Переживу -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| andrey_pst |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 37 Регистрация: 24.4.2003 Где: Пермь Репутация: нет Всего: 1 |
Да, я именно с этой проблемой и парился (в Firebird). Использование min - это классный ход! Такие есть. |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: нет Всего: 11 |
Писал прямо здесь(могут быть ошибки). Работать доллжно. P.S. Слово автор по англицки пишется по другому -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 1 Всего: 22 |
Мне это все до жути напоминает учебные примеры (с ответами) из какой-то книжки по SQL. Название никак не вспомню. Блин, это BOL MS SQL! только названия столбцов другие - английские.
|
|||
|
||||
| igon |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 3 Всего: 21 |
to LSD
Хм, у меня в Oracle 9.1 все работает...
Так и есть. Но, ИМХО, естественнее добавить в group by столбцы - я-таки долго ломал голову над физическим смыслом min(A.FAMILY)
Интересно бы сравнить производительность вариантов 1) с min() 2) с конкатенацией 3) без конкатенации Мои тестовые таблицы слишком маленькие -> время одинаковое -------------------- Хотите поговорить об этом? |
||||
|
|||||
| LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Согласен, это более элегантное решение, а так:
не будет проблем и с полными однофамильцами.
Ты как меряешь? Сам время засекаешь или используешь оракловскую статистику? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||
|
|||||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 3 Всего: 21 |
Использую время выполнения запроса в PL/SQL Developer. Но для таблиц с 10-15 записями любой способ измерения, ИМХО, будет "несерьезным". -------------------- Хотите поговорить об этом? |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 1 Всего: 22 |
igon
Oracle не щупал (пока |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: нет Всего: 11 |
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Цена имеет смысл только для аналогичного запроса. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 3 Всего: 21 |
Для 6 авторов и 196608 книг
Oracle SQL Analyze выдал такой результат (для Rule) 1) с min() 2) с конкатенацией 3) без конкатенации Elapsed Time: 3 < 1 < 2 (3.03c < 3.26c < 4.03c) Я согласен с LSD, более того - цена имеет смысл при оптимизации одного запроса, не для сравнения разных. BTW, Explain Plan у всех трех запросов совершенно одинаковый. -------------------- Хотите поговорить об этом? |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |