Table des matières
Explanation:
Example:
⚠️ Notes:
❌ What Doesn't Work Reliably:
Alternative: Using DISTINCT ON (PostgreSQL only)
Maison base de données SQL Comment sélectionner la première ligne de chaque groupe par groupe en SQL?

Comment sélectionner la première ligne de chaque groupe par groupe en SQL?

Aug 07, 2025 pm 10:15 PM
sql group by

How to select the first row in each GROUP BY group in SQL?

To select the first row in each GROUP BY group in SQL, you typically need to use window functions, as standard GROUP BY doesn't guarantee row order or let you directly pick a full row based on ranking within the group.

How to select the first row in each GROUP BY group in SQL?

The most reliable and widely supported approach (in databases like PostgreSQL, SQL Server, Oracle, SQLite 3.25+, MySQL 8.0+) is to use the ROW_NUMBER() window function.

✅ Recommended Method: Use ROW_NUMBER()

SELECT *
FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY group_column ORDER BY some_column) AS rn
  FROM your_table
) t
WHERE rn = 1;

Explanation:

  • PARTITION BY group_column: Defines the groups (same as GROUP BY).
  • ORDER BY some_column: Determines which row is "first" — for example, the earliest date, highest value, etc.
  • ROW_NUMBER(): Assigns a unique number starting at 1 within each group.
  • The outer query filters to keep only the first row (rn = 1) from each group.

Example:

Suppose you have a table orders and want the first order (by date) for each customer:

How to select the first row in each GROUP BY group in SQL?
SELECT *
FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS rn
  FROM orders
) t
WHERE rn = 1;

This gives one row per customer_id — the earliest order.


⚠️ Notes:

  • Order matters: Always specify a meaningful ORDER BY inside OVER() to control which row is considered "first".
  • Ties: ROW_NUMBER() assigns arbitrary unique numbers even if values are tied. If you want all tied rows, use RANK() instead.
  • Older MySQL versions (< 8.0): Don't support window functions. You'd need workarounds with self-joins or variables (not recommended if you can upgrade).

❌ What Doesn't Work Reliably:

SELECT * FROM your_table GROUP BY group_column;

This is invalid in most SQL databases unless all selected columns are aggregated or functionally dependent on the group. Even in MySQL with sql_mode relaxed, it picks an arbitrary (not necessarily first) row.

How to select the first row in each GROUP BY group in SQL?

Alternative: Using DISTINCT ON (PostgreSQL only)

If you're using PostgreSQL, a cleaner syntax is available:

SELECT DISTINCT ON (group_column)
  *
FROM your_table
ORDER BY group_column, some_column;

This picks the first row per group_column based on the ORDER BY.


In short: use ROW_NUMBER() for portable, clear, and reliable results. It's the standard way to get the first row per group in modern SQL.

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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1517
276
Comment exécuter des requêtes SQL dans Python? Comment exécuter des requêtes SQL dans Python? Aug 02, 2025 am 01:56 AM

Installer le pilote de base de données correspondant; 2. Utilisez Connect () pour se connecter à la base de données; 3. Créez un objet de curseur; 4. Utilisez EXECUTE () ou Execumany () pour exécuter SQL et utiliser une requête paramétrée pour empêcher l'injection; 5. Utilisez fetchall (), etc. pour obtenir des résultats; 6. commit () est requis après modification; 7. Enfin, fermez la connexion ou utilisez un gestionnaire de contexte pour le gérer automatiquement; Le processus complet garantit que les opérations SQL sont sûres et efficaces.

Comment calculez-vous la différence entre deux dates dans SQL? Comment calculez-vous la différence entre deux dates dans SQL? Aug 02, 2025 pm 01:29 PM

Pour calculer la différence entre deux dates, vous devez sélectionner la fonction correspondante en fonction du type de base de données: 1. Utilisez DADAFIF () pour calculer la différence de jour dans MySQL, ou spécifiez les unités telles que l'heure et la minute dans TimeStampDiff (); 2. Utilisez DADAIFF (DATE_PART, START_DATE, END_DATE) dans SQLServer et spécifiez les unités; 3. Utilisez la soustraction directe dans PostgreSQL pour obtenir la différence de jour, ou utilisez l'extrait (dayFromage (...)) pour obtenir des intervalles plus précis; 4. Utilisez la fonction Julianday () pour soustraire la différence de jour dans SQLite; Faites toujours attention à la commande de date

Cube SQL et rouleau pour l'agrégation multidimensionnelle Cube SQL et rouleau pour l'agrégation multidimensionnelle Jul 29, 2025 am 12:28 AM

Le cube est utilisé pour générer une agrégation de toutes les combinaisons de dimensions, adaptées à une analyse croisée; Rollup est progressivement résumé aux niveaux hiérarchiques, adapté aux données avec des relations hiérarchiques. Cube génère un total de 8 combinaisons selon la région, le produit et le trimestre, tandis que Rollup génère un résumé de l'année, du mois, du jour et d'autres niveaux selon l'année, le mois et le jour. Cube convient à la visualisation de tous les résultats transversaux, Rollup convient à l'affichage des hiérarchies. Notez que Cube peut faire exploser l'ensemble de résultats et Rollup dépend de l'ordre sur le terrain. La ligne récapitulative peut être identifiée via la fonction de groupement (), et la ligne totale est nommée avec coalesce pour améliorer la lisibilité.

Optimisation de la commande SQL par pour les performances de la requête Optimisation de la commande SQL par pour les performances de la requête Aug 04, 2025 am 11:19 AM

Pour optimiser les performances de OrderBy dans SQL, vous devez d'abord comprendre son mécanisme d'exécution et utiliser rationnel de l'index et de la structure de requête. Lorsque le champ de tri n'a pas d'index, la base de données déclenchera "FilesTort", consommant beaucoup de ressources; Par conséquent, le tri direct de grandes tables doit être évité et la quantité de données triées doit être réduite dans les conditions. Deuxièmement, l'établissement d'un indice de correspondance pour les champs de tri peut considérablement accélérer les requêtes, telles que la création d'index de commande inverse dans MySQL 8.0 pour améliorer l'efficacité. De plus, la pagination profonde (telle que Limit1000, 10) doit être utilisée à la place avec une pagination de curseur basée sur l'indice (comme le cas échéant> 12345) pour sauter des analyses non valides. Enfin, la combinaison de la mise en cache, de l'agrégation asynchrone et d'autres moyens peut également optimiser davantage les performances de tri dans les scénarios d'ensemble de données importants.

Quels sont les types de données BLOB et CLOB dans SQL? Quels sont les types de données BLOB et CLOB dans SQL? Aug 07, 2025 pm 04:22 PM

BlobstoresbinaryDatalikeImages, Audio, Orpdfsasrawbytes withoutCharacterencoding, tandis que les opérations de tassement de tassement

Comment accordez-vous et révoquez-vous les autorisations dans SQL? Comment accordez-vous et révoquez-vous les autorisations dans SQL? Aug 04, 2025 am 09:19 AM

GrantandrevokeStAtsAtsAtSAUSEUSTANAGEUSERPERMISSIONSINSISQL.1.GrantprovidesPrivilegeslikeSelect, Insérez, mettez à jour, supprimez, altez, exécutez, orallprivilegesondatabaseObjectSorsorroles.2

Comment l'opérateur existe-t-il à l'opérateur en SQL? Comment l'opérateur existe-t-il à l'opérateur en SQL? Aug 05, 2025 pm 01:08 PM

UseExistsforexistenCheckckcks, en particulier avec une corrélation corrélée et de savoir quand les valeurs de base, asitstopthefirstmatchandhandlesnullsafely; useinformmershipchecksagainstsmall, connu, ornon-nullvaluestswhereadabilitymattersperformanceisnotcrirscricri

Comment utilisez-vous la clause ayant pour filtrer les groupes dans SQL? Comment utilisez-vous la clause ayant pour filtrer les groupes dans SQL? Aug 04, 2025 pm 12:12 PM

Utilisez la clause ayant pour filtrer les données groupées après GroupBy, en particulier lorsque les conditions impliquent des fonctions d'agrégation telles que Count (), SUM (), AVG (); 2. Contrairement à la clause WHERE, où est utilisée pour filtrer une seule ligne avant le regroupement, tout en ayant est utilisée pour filtrer les groupes en fonction du résultat d'agrégation après le regroupement; 3. Avoir doit être placé après GroupBy, et l'alias de colonne dans SELECT ne peut pas être utilisé et l'expression agrégée doit être répétée; 4. où et avoir peut être utilisé en même temps, le premier filtre la ligne d'origine et le second filtre les résultats du regroupement; 5. Les scénarios d'application courants comprennent la recherche de clients dont le numéro de commande dépasse la valeur spécifiée, les départements dont le salaire moyen est supérieur à une certaine valeur ou excluant les groupes avec des valeurs nulles; 6. Total

See all articles