#mysql #sql
#mysql #sql
Вопрос:
Реляционная база данных содержит 2 таблицы: книги и авторы, каждая из которых содержит более 1 миллиона строк.
Таблицы описываются следующим образом: Книги (название, проданные копии), где Название — это первичный ключ Авторы (Автор, название), где Название относится к книгам
Напишите ОДИН запрос, который показывает, что 3 лучших автора и 3 нижних автора основаны на количестве проданных копий.
Я пытаюсь решить эту проблему, однако у меня ничего не вышло.
select *
from authors a
left join books b on a.authortitle = b.title
order by b.sold;
когда я попробовал это, это ответ, который я получаю.
select *
from authors a
left join books b on a.authortitle = b.title
order by b.sold
group by author;
ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте
руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный
синтаксис для использования рядом с ‘group by author’ в строке 1
Я не уверен, что это значит. Кто-нибудь знает, как решить эту проблему? Спасибо!
Комментарии:
1. какую версию mysql вы используете?
2. показать образец данных !!! это обязательно!!
3. Считается ли продажа
0
копий «наименьшим»?
Ответ №1:
Вы можете использовать оператор ОБЪЕДИНЕНИЯ. Что-то вроде этого (этот код не проверен: D )
(select * from authors a left join books b on a.authortitle = b.title order by b.sold limit 3)
union
(select * from authors aa left join books bb on aa.authortitle = bb.title order by bb.sold desc limit 3)
Ответ №2:
select a.*,
rank() over(partition by a.author order by b.copiessold asc) rk
from authors a
left join books b on a.authortitle = b.title
where rk<4
UNION ALL
select a.*,
rank() over(partition by a.author order by b.copiessold desc) rk
from authors a
left join books b on a.authortitle = b.title
where rk<4;
Комментарии:
1. @DylanSee если это решило вашу проблему, поставьте зеленую галочку слева!!!!