Вычисление разности двух столбцов
Нередко в запросах требуется выполнять математические операции — например, вычислить изменение численности населения с 2000 по 2008 год. Для числовых столбцов операторы в SQLAlchemy работают так же, как и в Python.
Вы можете использовать их для сложения (+), вычитания (-), умножения (*), деления (/) и взятия остатка (%). Обратите внимание: при работе с нечисловыми типами столбцов их поведение может отличаться.
Давайте найдём 5 штатов с наибольшим приростом населения в период с 2000 по 2008 год.
Это упражнение является частью курса
Введение в базы данных на Python
Инструкции к упражнению
- Определите оператор выборки
stmt, который возвращает:- i) Столбец штата из таблицы
census(census.columns.state). - ii) Разницу в численности населения между 2008 (
census.columns.pop2008) и 2000 (census.columns.pop2000) годами с меткой'pop_change'.
- i) Столбец штата из таблицы
- Сгруппируйте результат по
census.columns.state. - Отсортируйте результат по изменению численности населения (
'pop_change') в порядке убывания, передавdesc('pop_change'). - Примените метод
.limit()к полученному оператору, чтобы вернуть только 5 записей. - Выполните запрос и получите все записи с помощью
fetchall(). - Оператор вывода уже написан за вас. Нажмите Отправить ответ, чтобы увидеть результаты!
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Build query to return state names by population difference from 2008 to 2000: stmt
stmt = select([____, (____-____).label(____)])
# Append group by for the state: stmt_grouped
stmt_grouped = stmt.group_by(____)
# Append order by for pop_change descendingly: stmt_ordered
stmt_ordered = stmt_grouped.order_by(____)
# Return only 5 results: stmt_top5
stmt_top5 = ____
# Use connection to execute stmt_top5 and fetch all results
results = connection.execute(____).fetchall()
# Print the state and population change for each record
for result in results:
print('{}:{}'.format(result.state, result.pop_change))