Maison >base de données >tutoriel mysql >Comment sélectionner la première ligne de chaque groupe dans un groupe postgresql par requête?

Comment sélectionner la première ligne de chaque groupe dans un groupe postgresql par requête?

DDD
DDDoriginal
2025-01-25 20:21:10973parcourir

How to Select the First Row of Each Group in a PostgreSQL GROUP BY Query?

Sélectionnez la première ligne du groupe PostgreSQL GROUP BY

Dans PostgreSQL, la sélection de la première ligne de chaque groupe dans une opération GROUP BY est une exigence courante. Pour cela, nous pouvons utiliser la puissante clause DISTINCT ON.

<code class="language-sql">SELECT DISTINCT ON (customer) id, customer, total
FROM purchases
ORDER BY customer, total DESC</code>
La clause

DISTINCT ON nous permet de définir quelles expressions sont considérées comme des doublons. Dans cet exemple, nous avons spécifié la colonne customer, ce qui signifie que seules les lignes avec la même valeur customer seront considérées comme des doublons.

La clause

ORDER BY définit l'ordre dans lequel les lignes sont traitées. La première ligne de chaque customer groupe sera la ligne avec la valeur totale la plus élevée. S'il existe plusieurs lignes avec la même valeur totale maximale, le facteur décisif sera l'ordre dans lequel les colonnes id sont définies.

Points clés

  • DISTINCT ON est une extension de PostgreSQL qui nous permet de spécifier quelles expressions déterminent les doublons.
  • L'expression
  • DISTINCT ON doit correspondre à l'expression principale de la clause ORDER BY.
  • La clause
  • ORDER BY peut être utilisée pour hiérarchiser les lignes au sein de chaque groupe.
  • Vous pouvez inclure des expressions dans la liste SELECT qui ne sont pas dans une clause DISTINCT ON ou ORDER BY.
  • L'index utilisé par une requête peut affecter considérablement les performances. Un index multicolonne couvrant les colonnes customer, total et id, dans le même ordre que la requête, offrira les meilleures performances.

Notes supplémentaires

Pour les données avec customer cardinalité de colonne élevée (un petit nombre de lignes par client), la méthode DISTINCT ON est très efficace. Cependant, pour les customer données avec une faible cardinalité de colonne (grand nombre de lignes par client), d'autres techniques de requête peuvent être plus efficaces.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn