Introduction: Récupérer la ligne supérieure de chaque groupe défini par un critère spécifique est une opération de base de données commune. PostgreSQL fournit plusieurs méthodes, avec DISTINCT ON
se démarquer de son efficacité et de sa facilité d'utilisation.
distinct sur: une technique puissante: DISTINCT ON
gère élégamment la sélection de la première ligne dans chaque groupe, basée sur un ordre choisi. Vous spécifiez les colonnes de regroupement et l'ordre pour déterminer la "première" ligne.
Syntaxe et utilisation: La clause DISTINCT ON
est concise:
SELECT DISTINCT ON (group_column1, group_column2, ...) column1, column2, ... FROM table_name ORDER BY group_column1, group_column2, ..., ordering_column;
group_column1
, group_column2
, ...: colonnes définissant les groupes. column1
, column2
, ...: colonnes à récupérer. ORDER BY
: Spécifie le tri dans chaque groupe; La première ligne selon cet ordre est sélectionnée. Exemple illustratif: pour récupérer les détails de l'achat le plus récent pour chaque client:
SELECT DISTINCT ON (customer_id) customer_id, purchase_date, amount FROM purchases ORDER BY customer_id, purchase_date DESC;
Améliorations de performances: Bien que DISTINCT ON
soit généralement efficace, l'indexation peut considérablement améliorer les performances, en particulier pour les grands ensembles de données. Un index approprié serait:
CREATE INDEX purchases_idx ON purchases (customer_id, purchase_date DESC);
Considérations importantes:
NULL
, utilisez NULLS LAST
ou NULLS FIRST
dans la clause ORDER BY
pour les résultats prévisibles. DISTINCT ON
, enveloppez la requête dans une autre instruction SELECT
avec une clause ORDER BY
distincte. Conclusion: DISTINCT ON
fournit une méthode robuste et efficace pour sélectionner la première ligne de chaque groupe dans PostgreSQL. L'indexation stratégique optimise davantage les performances, ce qui en fait un outil précieux pour l'analyse et l'agrégation des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!