La fonction SQL max_by permet d’extraire la valeur d’une colonne liée à la valeur maximale d’une autre, simplifiant ainsi des requêtes complexes souvent remplacées par des window functions. BigQuery intègre cette fonction, facilitant l’agrégation ciblée sans code verbeux ni sous-requêtes.
3 principaux points à retenir.
- max_by simplifie la récupération de valeurs associées au max d’une autre colonne.
- BigQuery intègre nativement cette fonction, évitant des requêtes complexes avec row_number().
- Idéal pour identifier la dernière commande, le dernier commentaire ou événement lié à un utilisateur.
Qu’est-ce que la fonction max_by en SQL
La fonction max_by en SQL est une véritable pépite pour quiconque souhaite simplifier ses requêtes. En essence, cette fonction d’agrégation retourne la valeur d’une colonne correspondant à la valeur maximale d’une autre colonne. Vous cherchez à récupérer l’ID d’une commande la plus récente basée sur la date de création ? max_by est votre allié. Fini les constructions complexes avec row_number() ou les sous-requêtes alambiquées qui rendent votre code illisible.
Pour illustrer son utilisation, prenons un exemple concret. Imaginez que vous disposez d’une table commandes avec les colonnes id_commande, date_commande et montant. Si vous souhaitez connaître le montant de la commande la plus récente, au lieu d’opter pour une requête compliquée, vous pourriez simplement faire :
SELECT max_by(montant, date_commande) AS montant_commande_recente
FROM commandes;
Dans ce cas, max_by retourne le montant de la commande correspondante à la date_commande maximale. Ce qui semble simple, se révèle être une solution en or pour vos traitements analytiques. Vous gagnez en lisibilité et en efficacité. C’est particulièrement pertinent dans les environnements où la rapidité des décisions est cruciale.
Cette fonction est spécifiquement disponible dans BigQuery, ce qui en fait un outil précieux pour les utilisateurs de cette plateforme. En évitant des requêtes longues et parfois des performances dégradées, max_by se révèle être un excellent ajout à l’arsenal de quiconque travaille avec des données importantes.
En somme, l’importance pratique de max_by se situe dans sa capacité à rendre vos requêtes plus lisibles et maintenables, tout en accédant à des données pertinentes rapidement. Pour des détails supplémentaires, n’hésitez pas à consulter cette source utile sur les fonctions d’agrégation ici.
Comment utiliser max_by pour extraire la dernière valeur sans complexité
La fonction max_by est particulièrement efficace pour extraire des données pertinentes sans se perdre dans la complexité des requêtes. En gros, elle s’utilise pour agréger deux colonnes : max_by(col_valeur, col_cible). Cela signifie que vous pouvez facilement sélectionner la valeur maximale d’une colonne en fonction d’une autre, ce qui simplifie drastiquement vos requêtes SQL.
Prenons un exemple concret. Supposons que vous souhaitiez récupérer le dernier order_id pour chaque user_id d’une table d’ordres. Voici comment vous pouvez le faire avec max_by :
SELECT
user_id,
MAX_BY(order_id, ordered_at) AS dernier_order_id
FROM
ordres
GROUP BY
user_id;
Dans cette requête, MAX_BY(order_id, ordered_at) vous permet d’obtenir directement l’order_id associé à la date la plus récente (ordered_at) pour chaque utilisateur. Cette simplicité est un avantage indéniable par rapport à des méthodes plus compliquées, comme l’utilisation de ROW_NUMBER() OVER PARTITION BY, qui nécessite une définition plus longue et moins lisible.
En effet, écrire directement avec max_by non seulement allège le code, mais améliore aussi sa maintenance. Des requêtes plus courtes sont généralement plus faciles à comprendre. Quand vous avez des équipes qui doivent gérer, lire et modifier le code, chaque ligne qui peut être simplifiée sans compromettre la fonctionnalité est une victoire.
À titre d’illustration, si vous deviez recourir à une approche avec ROW_NUMBER(), cela pourrait ressembler à cela :
WITH OrdreNombres AS (
SELECT
user_id,
order_id,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY ordered_at DESC) AS rang
FROM
ordres
)
SELECT
user_id,
order_id
FROM
OrdreNombres
WHERE
rang = 1;
Comme vous pouvez le constater, notre solution avec max_by est beaucoup plus directe et compréhensible. En réduisant la longueur et la complexité de votre code SQL, vous profitez également d’une meilleure efficacité dans l’écriture, ce qui est essentiel dans un environnement de travail dynamique.
Pour en savoir plus sur l’utilisation des fonctions d’agrégation comme max_by, vous pouvez consulter cette ressource utile : SQL.sh.
Quelles alternatives à max_by et quand les utiliser
Si la fonction max_by vous simplifie la vie pour déterminer la ligne associée à la valeur maximale d’une colonne donnée, sachez qu’il existe d’autres alternatives tout aussi efficaces : ROW_NUMBER() et FIRST_VALUE(). Ces deux fonctions ont leurs propres usages selon ce que vous souhaitez accomplir exactement.
- ROW_NUMBER() : Cette fonction est idéale lorsque vous devez classer des éléments et extraire plusieurs lignes selon des critères précis. Par exemple, si vous souhaitez obtenir les trois meilleures ventes par produit, ROW_NUMBER() vous permettra d’attribuer un numéro de rang à chaque vente et de filtrer selon ce classement. C’est particulièrement utile lors d’analyses où le contexte du classement est important.
- FIRST_VALUE() : À l’opposé, cette fonction retourne la première valeur d’une colonne selon un ordre préspécifié. Si vous voulez simplement savoir quel était le premier montant d’une vente en regardant une table triée par date, c’est la solution à privilégier. Elle fournit une réponse rapide sans se soucier des autres lignes.
Pour vous aider à choisir la bonne méthode selon vos besoins, voici un tableau récapitulatif :
| Fonction | Simplicité | Performances | Lisibilité | Cas d’usage typique |
|---|---|---|---|---|
| max_by | Élevée | Moyenne | Élevée | Pour obtenir la ligne liée à la valeur maximale d’une colonne |
| ROW_NUMBER() | Moyenne | Élevée | Moyenne | Pour filtrer plusieurs lignes selon un classement précis |
| FIRST_VALUE() | Élevée | Élevée | Élevée | Pour obtenir la première valeur dans un ordre défini |
Chaque méthode a ses avantages et inconvénients. Par exemple, si votre objectif est la clarté et la simplicité, max_by ou FIRST_VALUE() pourraient être plus adaptés. En revanche, si votre analyse requiert une flexibilité supérieure, optez pour ROW_NUMBER(). La bonne pratique est d’analyser vos besoins avant de choisir la fonction, afin d’éviter les complexités inutiles. Pour approfondir le sujet et partager vos expériences de requêtes SQL, n’hésitez pas à consulter ce fil sur Reddit.
Pourquoi intégrer max_by dans votre boîte à outils SQL dès aujourd’hui
Intégrer la fonction max_by dans votre boîte à outils SQL n’est pas seulement une bonne décision, c’est un véritable choix stratégique. Pourquoi ? Parce que maîtriser max_by améliore considérablement la rapidité et la lisibilité de vos requêtes SQL, surtout quand vous traitez des jeux de données complexes. En utilisant cette fonction, vous vous offrez un gain de temps précieux lors de l’analyse de données. Imaginez pouvoir extraire des informations cruciales, comme le dernier événement ou commande, en une seule ligne de code. C’est précisément ce que max_by vous permet de faire.
Cette fonction réduit non seulement les erreurs, mais maintient également un code épuré et compréhensible. Fini les sous-requêtes imbriquées qui rendent vos requêtes obscures et difficiles à suivre. Avec max_by, vous pouvez clairement exprimer votre intention dans votre code, ce qui facilite la maintenance et la collaboration avec d’autres analystes ou développeurs. En d’autres termes, adopter max_by revient à prendre des décisions intelligentes qui élèvent votre pratique SQL à un niveau supérieur.
Pour ceux qui utilisent des plateformes comme BigQuery, voici un exemple d’utilisation de max_by.
SELECT user_id,
MAX_BY(event_time, event_type) AS last_event
FROM user_events
GROUP BY user_id;
Dans cet exemple, on extrait le dernier événement pour chaque utilisateur en utilisant la fonction max_by sans alourdir la requête. C’est une manière simple d’optimiser vos analyses. Alors, pourquoi hésiter à mettre en pratique max_by dans vos futurs projets ? Cela peut vraiment accroître votre productivité SQL.
En conclusion, ne sous-estimez pas l’importance d’adopter cet outil dans vos processus de data professionnels. La clarté du code et une approche simplifiée des requêtes compliquées sont essentielles pour rester compétitif dans le monde de l’analyse de données. Si vous n’êtes pas encore convaincu, commencez à explorer les possibilités offertes par max_by, c’est un investissement qui rapportera sans aucun doute. Pour plus de détails, n’hésitez pas à visiter cette page.
Prêt à rendre vos requêtes SQL plus simples avec max_by ?
La fonction max_by est une petite pépite SQL largement sous-exploitée qui va droit au but : extraire la valeur liée au maximum d’une autre colonne sans s’embarquer dans des constructions lourdes comme row_number(). En BigQuery, elle simplifie considérablement des cas fréquents comme récupérer la dernière commande ou le dernier événement utilisateur. C’est un vrai atout pour rendre vos requêtes plus lisibles et votre code plus maintenable. Intégrer max_by à votre arsenal SQL, c’est gagner en clarté et en efficacité. Pourquoi perdre du temps alors qu’une fonction conçue pour ce besoin spécifique existe et marche très bien ?
FAQ
Qu’est-ce que la fonction SQL max_by ?
Dans quels cas utiliser max_by plutôt que row_number() ?
Est-ce que max_by est disponible dans tous les moteurs SQL ?
Comment écrire une requête simple avec max_by dans BigQuery ?
max_by améliore-t-elle la performance des requêtes SQL ?
A propos de l’auteur
Franck Scandolera est consultant et formateur indépendant expert en Data Engineering, Web Analytics et automatisation. Responsable de l’agence webAnalyste et de Formations Analytics, il accompagne depuis plus de dix ans entreprises et professionnels à structurer, automatiser et exploiter leurs données avec des outils comme BigQuery, SQL, et l’IA générative. Sa maîtrise technique et son approche pédagogique pragmatique font de lui un référent crédible pour simplifier et optimiser les requêtes SQL dans les environnements data modernes.
⭐ Analytics engineer, Data Analyst et Automatisation IA indépendant ⭐
- Ref clients : Logis Hôtel, Yelloh Village, BazarChic, Fédération Football Français, Texdecor…
Mon terrain de jeu :
- Data Analyst & Analytics engineering : tracking avancé (GTM server, e-commerce, CAPI, RGPD), entrepôt de données (BigQuery, Snowflake, PostgreSQL, ClickHouse), modèles (Airflow, dbt, Dataform), dashboards décisionnels (Looker, Power BI, Metabase, SQL, Python).
- Automatisation IA des taches Data, Marketing, RH, compta etc : conception de workflows intelligents robustes (n8n, App Script, scraping) connectés aux API de vos outils et LLM (OpenAI, Mistral, Claude…).
- Engineering IA pour créer des applications et agent IA sur mesure : intégration de LLM (OpenAI, Mistral…), RAG, assistants métier, génération de documents complexes, APIs, backends Node.js/Python.






