ORACLE sql:返回与SUM值相关的子查询的MAX值相关的列
我遇到问题,只能使用子查询。我找到了已售出最多的书的作者姓名。如果只有一行匹配totalsold的MAX值,那么我的工作原理就是如此。ORACLE sql:返回与SUM值相关的子查询的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)
然而,在理论上有可能是最高值的领带,我停留在如何返回相关的ISBN绑在MAX值(S)。
在本质上是如何做到这一点查询,而无需使用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)))
你的解决方案是错误的。
- 您需要先找到一个数字,表示最大销售量的书籍。这个 查询将返回一个数字。说$ MAXNUMBER
- 然后,你需要通过步骤书籍加盟找到所有书籍,在那里出售相同数量为$ MAXNUMBER
- 这时你会发现作者2
我给你的子查询返回给你一套已售出最多版本的图书。
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,因为作者可以拥有两本出售相同最大副本的书籍。
根据最终要求,如果您只需要作者姓名或作者姓名与书籍名称,则需要构建不同的查询。
不要认为使用'IN'和'='的值有所不同我更关心使用'rownum = 1',因为无论如何这只会返回一个值。 – 2015-04-06 00:41:30
您的解决方案从开始就是错误的。我会编辑我的答案... – 2015-04-06 00:42:16
您并不需要在子查询中执行所有这些连接。检查我更新的答案。 – 2015-04-06 01:08:26
您允许使用分析功能吗? – 2015-04-06 01:31:39