読者の年齢が平均年齢を下回るすべての本を表示する必要があります。 スキーマは、これらのテーブルで構成されています:SQLでWITH句を使用すると、1つの値に対して複数の平均値が得られます
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行になります。何か案は?前もって感謝します!
どのように多くのレコードを使用すると、年齢、Book.ISBNとして 'SELECT年齢(生年月日)から抜け出すか、名前 リーダー FROM Book.ISBN = Exemplar.ISBN'に関する書籍を登録しようReader.Number = Exemplar.Readerに模範を登録しよう私はそれが10だと思っています。私の推測では、「読者」ごとに複数の「Examplar」、または「Exemplar」ごとに複数の「Book」があることです。 – JNevill
私はこれがうまくいかないと信じています - 第2の表ではMeanAgeに列平均を定義しています。しかし、最後のクエリでは、MeanAgeという名前の列を検索します。たぶん最終行は 'WHERE Age
Hogan
@JNevillあなたは正しいですが、7つのユニークな本、8つの読者がありますが、結果の表は10行です。 – Kristupas