НачатьНачать бесплатно

Вычисление разности двух столбцов

Нередко в запросах требуется выполнять математические операции — например, вычислить изменение численности населения с 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'.
  • Сгруппируйте результат по 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))
Редактировать и запускать код