Dans le chapitre précédent, nous avons vu comment faire un filtrage après une agrégation. L'opération que nous allons voir dans ce chapitre est très différente, mais ici elle va nous permettre d'arriver à peu près à la même conclusion.
En effet, au lieu d'utiliser HAVING comme précédemment, nous aurions aussi pu tout simplement trier les lignes selon la colonne nb_societes
: de la plus grande valeur à la plus petite.
Découvrez ORDER BY
Voici comment utiliser ORDER BY :
SELECT * FROM entity ORDER BY lifetime ;
Cette requête renvoie l'ensemble des lignes de la table entity
, et classe les sociétés selon leur colonne lifetime
.
Par défaut, le tri se fait dans l'ordre ascendant, c'est-à-dire du plus petit au plus grand. La requête précédente est donc équivalente à celle-ci :
SELECT * FROM entity ORDER BY incorporation_date ASC ;
Et pour trier dans l'ordre descendant ?
Il suffit de remplacer ASC par DESC :
SELECT * FROM entity ORDER BY incorporation_date DESC ;
Trier sur plusieurs colonnes
Parfois, on peut vouloir trier selon plusieurs colonnes. C'est bien entendu possible ! Il suffit de les séparer par une virgule.
Utilisons le ORDER BY dans le cadre de notre enquête :
Au terme de cette vidéo, voici la requête que vous aurez écrite :
SELECT
i.id as intermediary_id,
i.name as intermediary_name,
e.jurisdiction,
e.jurisdiction_description,
count(*) as nb_societes
FROM
intermediary i,
assoc_inter_entity a,
entity e
WHERE
a.entity = e.id
AND a.inter = i.id
AND (i.id = 5000 OR i.id = 5001)
GROUP BY
i.id, i.name, e.jurisdiction, e.jurisdiction_description
ORDER BY
nb_societes DESC
LIMIT
5
Et voici le résultat de cette requête :
Bon, parmi ces 5 lignes, on n'a pas encore de paradis fiscaux... On va donc continuer nos recherches !
À vous de jouer
Contexte
Afin de réaliser une frise chronologique dans votre article, vous souhaitez avoir un aperçu du début de l'activité des 2 intermédiaires, afin de savoir quand faire débuter votre frise. Vous décidez donc d'afficher la date des premières sociétés créées.
Consignes
Modifiez cette requête pour trier les lignes selon la colonne incorporation_date
de la table entity
dans l'ordre croissant :
SELECT
i.id as intermediary_id,
i.name as intermediary_name,
e.jurisdiction,
e.jurisdiction_description,
e.incorporation_date
FROM
intermediary i,
assoc_inter_entity a,
entity e
WHERE
a.entity = e.id
AND a.inter = i.id
AND (i.id = 5000 OR i.id = 5001)
Vérifiez votre travail
Il suffit d'ajouter la colonne voulue après un ORDER BY :
SELECT
i.id as intermediary_id,
i.name as intermediary_name,
e.jurisdiction,
e.jurisdiction_description,
e.incorporation_date
FROM
intermediary i,
assoc_inter_entity a,
entity e
WHERE
a.entity = e.id
AND a.inter = i.id
AND (i.id = 5000 OR i.id = 5001)
ORDER BY
incorporation_date
En résumé
On trie des lignes grâce à ORDER BY.
L'ordre de tri peut être défini grâce à ASC et DESC.
Pour trier selon plusieurs colonnes, il faut écrire ces colonnes après le ORDER BY, en les séparant par une virgule.
Il faut continuer nos recherches, je sens que nous sommes proches du but ! Dans le chapitre suivant, nous vérifierons si nous n'avons pas oublié des données en chemin…