我遇到的问题是我只应该使用子查询。我找到了最畅销书籍作者的名字。如果只有一行与totalsold的MAX值匹配,我的工作原理。
SELECT fname, lname
FROM Books b
JOIN BookAuthor ba ON b.isbn = ba.isbn
JOIN Author a ON ba.authorid = a.authorid
WHERE b.isbn =
(SELECT isbn
FROM
(SELECT SUM(quantity) as totalsold, ba.isbn as isbn
FROM BookAuthor ba
JOIN Author a ON ba.authorid = a.authorid
JOIN OrderItems oi ON ba.isbn = oi.isbn
GROUP BY ba.isbn
ORDER BY totalsold DESC)
WHERE rownum = 1)
然而理论上可能存在MAX值并列,我坚持如何返回与MAX值相关联的isbn。
本质上如何在不使用WHERE rownum = 1的情况下执行此查询。
我想出了这个,但似乎过于笨重,但它确实有效:
SELECT fname, lname
FROM Books b
JOIN BookAuthor ba ON b.isbn = ba.isbn
JOIN Author a ON ba.authorid = a.authorid
WHERE b.isbn IN
(SELECT ISBN
FROM
(SELECT SUM(quantity) as totalsold, ba.isbn as isbn
FROM BookAuthor ba
JOIN Author a ON ba.authorid = a.authorid
JOIN OrderItems oi ON ba.isbn = oi.isbn
GROUP BY ba.isbn)
WHERE totalsold =
(SELECT MAX(totalsold)
FROM
(SELECT SUM(quantity) as totalsold, ba.isbn as isbn
FROM BookAuthor ba
JOIN Author a ON ba.authorid = a.authorid
JOIN OrderItems oi ON ba.isbn = oi.isbn
GROUP BY ba.isbn)))
答案 0 :(得分:0)
你的解决方案是错误的。
我会给你子查询,这些子查询会返回给你出售最大副本的isbn(s)图书。
SELECT
oi2.isbn
FROM
OrderItems oi2
WHERE
SUM(oi2.quantity) = (SELECT MAX(st.sumtotal) as total FROM (SELECT
SUM(oi.quantity) AS sumtotal
FROM
OrderItems oi
GROUP BY oi.isbn) st) GROUP BY oi2.isbn
现在您可以将其加入或将其用作IN(子查询)函数的子查询。您还需要执行GROUP BY author_id,因为作者可以拥有2本出售相同最大副本的书籍。
根据最终要求,您需要构建不同的查询,以防您只想要作者的姓名或作者的姓名。名字和书名。