关系数据库包含2个表:书籍和作者,每个表包含超过一百万行。
这些表描述为: 以“书名”为主键的书籍(标题,已售副本) 标题是指书籍的作者(作者,标题)
编写一个查询,根据所售副本的数量显示前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行的“按作者分组”附近使用的语法
我不确定这是什么意思。有谁知道如何解决这个问题?谢谢!
答案 0 :(得分:3)
您可以使用 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)
答案 1 :(得分:0)
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;