Zacznij terazZacznij za darmo

Obliczanie różnicy między dwiema kolumnami

Często w zapytaniach trzeba wykonywać operacje matematyczne – na przykład gdy chcesz obliczyć zmianę liczby ludności między rokiem 2000 a 2008. W przypadku operacji na liczbach operatory w SQLAlchemy działają tak samo jak w Pythonie.

Możesz ich używać do dodawania (+), odejmowania (-), mnożenia (*), dzielenia (/) i wyznaczania reszty z dzielenia (%). Uwaga: ich zachowanie może być inne w przypadku kolumn z typami nienumerycznymi.

Znajdźmy teraz 5 stanów z największym wzrostem populacji między rokiem 2000 a 2008.

To ćwiczenie jest częścią kursu

Wprowadzenie do baz danych w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Zdefiniuj instrukcję select o nazwie stmt, która zwróci:
    • i) kolumnę stanu z tabeli census (census.columns.state).
    • ii) różnicę w liczbie ludności między rokiem 2008 (census.columns.pop2008) a rokiem 2000 (census.columns.pop2000), oznaczoną jako 'pop_change'.
  • Pogrupuj wyniki według census.columns.state.
  • Posortuj wyniki według zmiany populacji ('pop_change') w kolejności malejącej, przekazując desc('pop_change').
  • Użyj metody .limit() na poprzedniej instrukcji, aby zwrócić tylko 5 rekordów.
  • Wykonaj zapytanie i pobierz wszystkie rekordy za pomocą fetchall().
  • Instrukcja print została już napisana. Prześlij odpowiedź, aby zobaczyć wyniki!

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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))
Edytuj i uruchom kod