首页 > 解决方案 > 如何编写查询以使用单个查询从 2 个表中选择顶部和底部 3 个值?

问题描述

一个关系数据库包含 2 个表:书籍和作者,每个表包含超过 100 万行。

这些表描述为: Books (Title, Copies Sold) 其中 Title 是主键 Authors (Author, Title) 其中 Title 是指书籍

编写一个 SINGLE 查询,根据售出的副本数显示前 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;

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“按作者分组”附近使用正确的语法

我不确定这意味着什么。有谁知道如何解决这个问题?谢谢!

标签: mysqlsql

解决方案


您可以使用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)

推荐阅读