Calculer la différence entre deux colonnes
Il est fréquent d’avoir à effectuer des opérations mathématiques dans une requête, par exemple pour calculer l’évolution de la population entre 2000 et 2008. Pour les opérations sur des nombres, les opérateurs de SQLAlchemy fonctionnent comme en Python.
Vous pouvez utiliser ces opérateurs pour effectuer des additions (+), soustractions (-), multiplications (*), divisions (/) et modulo (%). Remarque : leur comportement diffère lorsqu’ils sont appliqués à des colonnes non numériques.
Voyons maintenant les 5 États ayant connu la plus forte croissance démographique entre 2000 et 2008.
Cet exercice fait partie du cours
Introduction aux bases de données en Python
Instructions
- Définissez une instruction select appelée
stmtpour renvoyer :- i) La colonne de l’État de la table
census(census.columns.state). - ii) La différence de population entre 2008 (
census.columns.pop2008) et 2000 (census.columns.pop2000) avec l’alias'pop_change'.
- i) La colonne de l’État de la table
- Regroupez l’instruction par
census.columns.state. - Triez l’instruction par variation de population (
'pop_change') en ordre décroissant, en passantdesc('pop_change'). - Utilisez la méthode
.limit()sur l’instruction précédente pour ne renvoyer que 5 enregistrements. - Exécutez l’instruction et récupérez les enregistrements avec
fetchall(). - L’instruction d’affichage a déjà été écrite pour vous. Soumettre la réponse pour voir les résultats !
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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))