繁体   English   中英

ORACLE sql:返回与SUM值的子查询的MAX值关联的列

[英]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)))

您的解决方案是错误的。

  1. 您首先需要找到一个数字,该数字代表已售出的最大书籍。 该查询将返回一个数字。 说$ maxNumber
  2. 然后,您需要查找所有与$ maxNumber出售的编号相同的书籍
  3. 然后,您将通过加入第2步中的书籍找到作者

我将给您提供子查询,该子查询返回给您一组售出最大份数的书的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM