我需要显示读者年龄低于平均年龄的每本书。 架构由以下表:在SQL中使用WITH子句时,我得到一个以上的平均值
AUTHOR: ISBN, Name, Lastname;
BOOK: ISBN, Name, Publisher, Pages, Value, Year;
EXEMPLAR: Number, Taken (date), Returned (date), ISBN, Reader (reader's number), READER: Number (also reader's number, just named differently), ID number, Name, Lastname, Birthdate, Address.
我写了下面的代码:
WITH Name_and_age (Age, Name, ISBN) as (SELECT age(birthdate) as Age, Book.ISBN, Name
FROM Reader
JOIN Exemplar on Reader.Number=Exemplar.Reader JOIN Book ON Book.ISBN=Exemplar.ISBN),
MeanAge (Average)
as (SELECT AVG(Age) as MeanAge FROM Name_and_age)
SELECT Age, MeanAge, Name, ISBN FROM Name_and_age, MeanAge
WHERE Age < MeanAge
但对于一些书,结果显示:2或3点不同年龄的平均值。唯一书籍的总数是7,但结果给了我10行。有任何想法吗?先谢谢你!
SELECT age(birthdate)作为年龄,Book.ISBN,名称 FROM Reader JOIN Exemplar on Reader.Number = Exemplar.Reader JOIN Book ON Book.ISBN = Exemplar.ISBN'我怀疑它是10.我的猜测是,根据'Reader',或者每个'Exemplar',你有多于一个'Examplar'或者多于一个'Book'。 – JNevill
我不相信这是有效的 - 在第二个表格中,您定义了MeanAge列平均值。但是在最后一个查询中,您搜索名为MeanAge的列。也许最后一行应该是WHERE Age
Hogan
@JNevill你是对的,有7本独特的书,8个阅读器,但是结果表由10行组成。 – Kristupas