Necesito mostrar todos los libros cuya edad del lector esté por debajo de la edad media. El esquema consta de estas tablas:
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.Escribí el siguiente código:
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 < MeanAgePero para algunos libros, el resultado muestra 2 o 3 promedios de edad diferentes. El número total de libros únicos es 7, sin embargo, el resultado me da 10 filas. ¿Algunas ideas? ¡Gracias de antemano!
Usted dice, I need to show every book whose reader's age is below the mean age .
Su código incluye esto:
SELECT Age, MeanAge, Name, ISBN No dijiste que querías edades. Si ese es el caso, no lo seleccione. Además, use la palabra distinct para tener en cuenta los libros que leen más de una persona. En otras palabras, cambie el código anterior a esto:
SELECT distinct MeanAge, Name, ISBNTambién es posible que desee cambiar esto:
SELECT AVG(Age) as MeanAgea esto
SELECT floor(AVG(Age)) as MeanAgeEso convertirá la edad media en un número entero y garantizará que si la edad promedio fue de 15,5, las personas de 15 años serán excluidas de los resultados.