如何通过ERROR:作为表达式使用的子查询返回的多于一行

如何通过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 
       ); 

您还没有计算平均正确要么。以上是我最好的猜测。

注意:“正确”的方式来编写查询使用窗口函数,但我猜你还没有学到。