Een verschil tussen twee kolommen berekenen
Vaak moet je rekenkundige bewerkingen doen in een query, bijvoorbeeld als je de verandering in bevolkingsaantal van 2000 naar 2008 wilt berekenen. Voor rekenkundige bewerkingen met getallen werken de operatoren in SQLAlchemy hetzelfde als in Python.
Je kunt deze operatoren gebruiken voor optellen (+), aftrekken (-), vermenigvuldigen (*), delen (/) en modulus (%). Let op: ze gedragen zich anders bij niet-numerieke kolomtypen.
Laten we nu de top 5 staten vinden met de grootste bevolkingsgroei tussen 2000 en 2008.
Deze oefening maakt deel uit van de cursus
Introductie tot databases in Python
Oefeninstructies
- Definieer een select-statement
stmtdat het volgende retourneert:- i) De kolom state van de
census-tabel (census.columns.state). - ii) Het verschil in bevolkingsaantal tussen 2008 (
census.columns.pop2008) en 2000 (census.columns.pop2000), gelabeld als'pop_change'.
- i) De kolom state van de
- Groepeer de statement op
census.columns.state. - Sorteer de statement op bevolkingsverandering (
'pop_change') in aflopende volgorde. Doe dit doordesc('pop_change')door te geven. - Gebruik de methode
.limit()op de vorige statement om slechts 5 records terug te geven. - Voer de statement uit en gebruik
fetchall()om de records op te halen. - De printopdracht is al voor je geschreven. Antwoord verzenden om de resultaten te bekijken!
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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))