[英]ORACLE sql: Return columns associated with MAX value of a subquery that SUM values
我有一个问题,我只能使用子查询。 我找到了销量最高的书籍作者姓名。 如果只有一行与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)))
您的解决方案是错误的。
我将给您提供子查询,该子查询返回给您一组售出最大份数的书的isbn。
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(subquery)函数的子查询。 您还需要执行GROUP BY author_id,因为在author上,有2本书的最大销量相同。
根据最终要求,您需要构建不同的查询,以防只想要作者的名字或只带有书名的作者的名字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.