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