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

时间:2015-04-06 00:22:16

标签: sql oracle

我遇到的问题是我只应该使用子查询。我找到了最畅销书籍作者的名字。如果只有一行与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 个答案:

答案 0 :(得分:0)

你的解决方案是错误的。

  1. 您首先需要找一个代表最畅销书籍的数字。这个     查询将返回一个数字。说$ maxNumber
  2. 然后你需要找到与$ maxNumber
  3. 销售数量相同的所有书籍
  4. 然后,您将通过加入第2步的书籍找到作者
  5. 我会给你子查询,这些子查询会返回给你出售最大副本的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本出售相同最大副本的书籍。

    根据最终要求,您需要构建不同的查询,以防您只想要作者的姓名或作者的姓名。名字和书名。

相关问题