Изменение типов

Некоторые агрегирующие функции работают только с числовыми типами данных. Потому такой запрос не выполнится для books:
Скопировать кодSQL
SELECT AVG(pages) AS average FROM books;
Взгляните на таблицу:
books
idNamegenreauthordate_pubpagespriceratingpub_name
1Капитанская дочка5Александр Пушкин1836-01-011301504.7АСТ
2Отцы и дети1Иван Тургенев1862-01-012402074.7Белый город
3Вишнёвый сад7Антон Чехов1903-01-01601384.4Росмэн
4Война и мир1Лев Толстой1869-01-011274Знание
5Анна Каренина1Лев Толстой1877-01-0110001264.6Эксмо
6Цветы для Элджернона4Дэниел Киз1959-01-012502804.7ЛитРес
7Похороните меня за плинтусом...5Павел Санаев1994-01-011841984.1АСТ
8Зелёная миля9Стивен Кинг1996-01-014201904.8Белый город
9Унесённые ветром1Маргарет Митчел1936-01-01624358Росмэн
10Три товарища1Эрих Мария Ремарк1936-01-014701964.7АСТ
11На Западном фронте без перемен4Эрих Мария Ремарк1929-01-012002734.6Белый город
12Триумфальная арка1Эрих Мария Ремарк1945-01-015202204.7Росмэн
13Чёрный обелиск1Эрих Мария Ремарк1956-01-014804204.6ЛитРес
14Ночь в Лиссабоне1Эрих Мария Ремарк1961-01-012501874.7ЛитРес
15Жизнь взаймы1Эрих Мария Ремарк1959-01-012402404.6ЛитРес
16Станция на горизонте1Эрих Мария Ремарк1927-01-012104.1Росмэн
17Евгений Онегин1Александр Пушкин1832-01-017363304.7Росмэн
Данные в выборке выглядят как числа, но в базе данных хранятся как строки. В жизни такое встречается часто — обычно из-за ошибок проектирования базы данных.
Изменим тип данных столбца в самом SQL-запросе. Типы преобразуют конструкцией CAST (от англ. «преобразование»):
Скопировать кодSQL
CAST (название_столбца AS тип_данных)
Название_столбца — это поле, тип данных которого нужно преобразовать. Тип_данных — тип, в который данные нужно перевести. Есть и другая форма записи:
Скопировать кодSQL
название_столбца :: тип_данных
Осталось познакомиться с типами данных в SQL.

Числовые типы данных

integer — целочисленный тип, аналогичный типу int в Python. В SQL диапазон целых чисел от -2147483648 до 2147483647.
real — число с плавающей точкой, как float в Python. Точность числа типа real до 6 десятичных разрядов.

Строковые типы данных

'Практикум' — значение строкового типа, в SQL запросе его заключают в одинарные кавычки.
varchar(n) — строка переменной длины, где n — ограничение. Этот тип данных похож на string в Python, но в отличие от него ограничен по длине: в поле можно занести любую строку короче, чем n символов.
text — строка любой длины. Полный аналог string в Python.

Дата и время

Любые вводимые значения даты или времени заключают в одинарные кавычки.
timestamp — дата и время. В формате timestamp чаще всего хранят события, происходящие несколько раз за день. Например, логи пользователей сайта.
date — дата.

Логический

boolean — логический тип данных. В SQL есть три варианта значений TRUE — «истина», FALSE — «ложь» и NULL — «неизвестно».
Вы изучили распространённые типы данных. Есть и много других. Вы можете познакомиться с ними самостоятельно в документации.
Вернёмся к «нерешаемой» задаче. Найдём среднее число страниц двумя способами:
Скопировать кодSQL
SELECT AVG(pages :: integer) AS average FROM books;
или:
Скопировать кодSQL
SELECT AVG (CAST(pages AS integer)) AS average FROM books;
Скопировать кодSQL
428,7058824
В данных о молочной продукции тоже есть ошибка. Данные поля weight записаны как строки, хотя на самом деле это числа. По такому поводу стоит написать баг-репорт. А пока исправьте эту ошибку локально, в запросе.