如何通过ERROR:作为表达式使用的子查询返回的多于一行
问题描述:
问题是,我需要返回书籍及其COUNT
,它们拥有读者的次数少于所有AVG
读者正在读书。我准备了这样的代码:如何通过ERROR:作为表达式使用的子查询返回的多于一行
SELECT book.name, book.publisher, COUNT(specimen.taken) FROM book
LEFT JOIN specimen ON book.isbn = specimen.isbn
WHERE (SELECT COUNT(specimen.taken) FROM specimen
GROUP BY specimen.isbn) <
(SELECT CAST(COUNT(specimen.nr)/COUNT(specimen.taken) AS
DECIMAL(10,2))
FROM specimen)
GROUP BY book.name, book.publisher;
但自从WHERE
子句中的第一SELECT
的结果返回每本书被带到了时代的数字,我不能与第二SELECT
得出总体平均它们进行比较。因此,我得到
ERROR: more than one row returned by a subquery used as an expression.
这是我应该用选择选择中选择什么角色?所有帮助表示赞赏!
答
与您的查询的主要问题是,你想要一个HAVING
条款,而不是一个WHERE
条款:
SELECT b.name, b.publisher, COUNT(*)
FROM book b LEFT JOIN
specimen s
ON b.isbn = s.isbn
GROUP BY b.name, b.publisher
HAVING COUNT(*) < (SELECT COUNT(*) * 1.0/COUNT(DISTINCT s2.isbn)
FROM specimen s2
);
您还没有计算平均正确要么。以上是我最好的猜测。
注意:“正确”的方式来编写查询使用窗口函数,但我猜你还没有学到。