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
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'.
- i) kolumnę stanu z tabeli
- Pogrupuj wyniki według
census.columns.state. - Posortuj wyniki według zmiany populacji (
'pop_change') w kolejności malejącej, przekazującdesc('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
printzostał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))