Как мне написать запрос для выбора верхнего и нижнего 3 значений из 2 таблиц, используя один запрос? - PullRequest
0 голосов
/ 22 апреля 2019

Реляционная база данных содержит 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, чтобы найти правильный синтаксис для использования рядом с «группа по автору» в строке 1

Я не уверен, что это значит.кто-нибудь знает, как решить эту проблему?Спасибо!

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Вы можете использовать оператор UNION .Примерно так (этот код не проверен: 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)
0 голосов
/ 22 апреля 2019
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...