Trouvez la première ligne de chaque groupe
Structure de requête
DISTINCT ON
<code class="language-sql">SELECT DISTINCT ON (grouping_expression) selected_columns FROM table_name ORDER BY grouping_expression, additional_ordering_expression(s)</code>
ORDER BY
Exemple Considérons
Tableau:
et les données suivantes: ORDER BY
purchases
Sortie:
<code class="language-sql">CREATE TABLE purchases ( id SERIAL PRIMARY KEY, customer VARCHAR(50) NOT NULL, total NUMERIC(10, 2) NOT NULL );</code>
Valeur nul
<code class="language-sql">INSERT INTO purchases (customer, total) VALUES ('Joe', 5), ('Sally', 3), ('Joe', 2), ('Sally', 1);</code>
Si la valeur de groupe peut contenir la valeur nul, il est recommandé d'ajouter
à la clause<code class="language-sql">SELECT DISTINCT ON (customer) id, customer, total FROM purchases ORDER BY customer, total DESC, id;</code>
Sélectionnez d'autres colonnes
La liste n'est pas limitée à l'expression du groupe. Il peut contenir d'autres colonnes, ce qui permet à cette technologie de remplacer les fonctions complexes de sous-requête ou d'agrégat / fenêtre.<code>id | customer | total ----------------------------- 1 | Joe | 5 2 | Sally | 3</code>
L'efficacité de la requête dépend de la distribution des données et du nombre de lignes de chaque groupe. Pour les petits groupes, il est généralement très efficace. Cependant, pour les grands groupes, la technologie alternative décrite dans le lien suivant peut fournir de meilleures performances: ORDER BY
NULLS LAST
<code class="language-sql">ORDER BY customer, total DESC NULLS LAST, id;</code>
SELECT
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!