簡體   English   中英

如何使查詢避免“單行子查詢返回多行”錯誤

[英]How do I make my query avoid the “single-row subquery returns more than one row” error

我需要退回最常購買的書籍的書名。 如果購買了多本相同金額的書,則會收到錯誤消息:

SELECT title
FROM books JOIN orderitems
USING (isbn) WHERE isbn=
    (SELECT isbn
    FROM orderitems
    HAVING SUM (quantity) =
        (SELECT MAX(SUM(quantity))
        FROM orderitems
        GROUP BY isbn)
    GROUP BY isbn)
GROUP BY title;

您子查詢返回不支持=運算符的多行,因此我in

SELECT title
FROM books JOIN orderitems
USING (isbn) WHERE isbn in
    (SELECT isbn
    FROM orderitems
    group by isbn
    HAVING SUM (quantity) =
        (SELECT MAX(SUM(quantity))
        FROM orderitems
        GROUP BY isbn
        )
    )

使用窗口功能!

SELECT title
FROM (SELECT isbn, title, SUM(quantity) as quantity,
             RANK() OVER (ORDER BY SUM(quantity) DESC) as seqnum
      FROM books b JOIN
           orderitems oi
           USING (isbn)
      GROUP BY isbn, title
     ) t
WHERE seqnum = 1;

您要按訂單數量對書籍進行排名,並且僅顯示排名最高的書籍(數量最大的書籍排名第一)。 有用於對行進行排名的窗口功能RANK

您只希望選擇書名,因此從書中選擇書名,然后在WHERE子句中應用您的條件。

select title
from books
where (isbn, 1) in -- ISBN ranked #1
(
  select isbn, rank() over (order by sum(quantity) desc)
  from orderitems
  group by isbn
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM