Calcolare la differenza tra due colonne
Spesso, in una query dovrai eseguire operazioni matematiche, ad esempio se vuoi calcolare la variazione della popolazione dal 2000 al 2008. Per le operazioni su numeri, gli operatori in SQLAlchemy funzionano come in Python.
Puoi usare questi operatori per eseguire addizione (+), sottrazione (-), moltiplicazione (*), divisione (/) e modulo (%). Nota: si comportano in modo diverso se usati con colonne non numeriche.
Troviamo ora i 5 stati con la maggior crescita della popolazione tra il 2000 e il 2008.
Questo esercizio fa parte del corso
Introduzione ai database in Python
Istruzioni dell'esercizio
- Definisci un'istruzione select chiamata
stmtper restituire:- i) La colonna dello stato della tabella
census(census.columns.state). - ii) La differenza nel conteggio della popolazione tra il 2008 (
census.columns.pop2008) e il 2000 (census.columns.pop2000) etichettata come'pop_change'.
- i) La colonna dello stato della tabella
- Raggruppa l'istruzione per
census.columns.state. - Ordina l'istruzione per variazione della popolazione (
'pop_change') in ordine decrescente, passandodesc('pop_change'). - Usa il metodo
.limit()sull'istruzione precedente per restituire solo 5 record. - Esegui l'istruzione e usa
fetchall()per ottenere i record. - L'istruzione di stampa è già pronta per te. Invia risposta per visualizzare i risultati!
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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))