Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Definieer een select-statement stmt dat 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'.
  • Groepeer de statement op census.columns.state.
  • Sorteer de statement op bevolkingsverandering ('pop_change') in aflopende volgorde. Doe dit door desc('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))
Code bewerken en uitvoeren