La fonction MAX_BY en SQL permet de récupérer la valeur d’une colonne liée à la valeur maximale d’une autre colonne, simplifiant ainsi des requêtes complexes souvent effectuées avec des window functions comme ROW_NUMBER(). Cette fonction est disponible notamment dans BigQuery.
3 principaux points à retenir.
- MAX_BY permet de récupérer une valeur liée au maximum d’une autre colonne en une seule fonction.
- Elle évite des requêtes complexes avec plusieurs étapes, notamment les windows functions.
- Principalement utilisée pour extraire des données comme la dernière commande d’un utilisateur ou l’événement le plus récent.
Qu’est-ce que la fonction MAX_BY en SQL
La fonction MAX_BY en SQL est un outil redoutablement efficace pour simplifier vos requêtes lorsque vous devez manipuler des données associées à des valeurs maximales. En gros, cette fonction vous permet d’extraire la valeur d’une colonne en fonction de la valeur maximale d’une autre colonne. Cela devient particulièrement pratique lorsque vous souhaitez, par exemple, identifier le dernier ordre passé par un utilisateur. Avec MAX_BY, vous obtenez ce résultat en un clin d’œil.
La syntaxe de MAX_BY est plutôt simple et se présente comme suit dans BigQuery :
MAX_BY(value_column, sort_column)
Il suffit d’indiquer d’abord la colonne dont vous voulez récupérer les valeurs, puis la colonne sur laquelle vous souhaitez effectuer le tri.
Un cas typique d’usage est l’obtention de l’ID de la commande la plus récente pour chaque utilisateur. Imaginons une table orders avec les colonnes order_id et ordered_at. Vous pouvez simplement écrire :
SELECT user_id,
MAX_BY(order_id, ordered_at) AS last_order_id
FROM orders
GROUP BY user_id;
Cela va directement vous donner l’ID de la commande la plus récemment passée par chaque utilisateur, sans avoir à vous embêter avec des partitions ou des classes de fenêtres.
Maintenant, comparons cela avec une approche plus traditionnelle utilisant ROW_NUMBER(). En effet, pour obtenir le même résultat, vous auriez besoin de quelque chose comme ça :
WITH ranked_orders AS (
SELECT user_id,
order_id,
ordered_at,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY ordered_at DESC) AS rn
FROM orders
)
SELECT user_id, order_id
FROM ranked_orders
WHERE rn = 1;
Avec cette méthode, vous avez essayé de trier et de partitionner vos données, ce qui rend le tout plus complexe et moins lisible. En somme, MAX_BY est une excellente occasion de simplifier vos requêtes et d’optimiser votre temps de développement. Pour approfondir le sujet, vous pouvez consulter cette documentation.
Quels sont les avantages concrets de MAX_BY en BigQuery
La fonction MAX_BY de BigQuery offre une solution élégante et efficace pour simplifier les requêtes SQL. Pourquoi est-ce un choix stratégique pour vos analyses ? D’abord, la lisibilité du code en prend un coup de fouet. Avec MAX_BY, vous réduisez le besoin de longues sous-requêtes ou de fenêtres complexes, ce qui rend le code plus compréhensible pour vous et vos collègues. Moins de lignes, plus de clarté. En termes de performance, cela se traduit par des temps d’exécution plus rapides. En évitant des calculs redondants inhérents aux approches alternatives, MAX_BY optimise les ressources en réduisant la charge sur le processeur et la mémoire.
Regardons de plus près les limitations des méthodes traditionnelles, comme les window functions complexes ou les sous-requêtes imbriquées. Par exemple, utiliser ROW_NUMBER() nécessite souvent de jongler avec des jointures et des conditions pour extraire la valeur maximale souhaitée. Cela peut rapidement devenir un cauchemar de complexité, avec une efficacité qui s’effondre à mesure que le volume de données augmente. En revanche, MAX_BY se concentre sur le résultat souhaité sans l’encombrement des calculs superflus. Cela rend le code moins sujet aux erreurs, donc plus facile à maintenir à long terme.
Utiliser MAX_BY dans des projets pratiques, comme l’analyse client ou le suivi d’événements, devient alors un véritable atout. Par exemple, pour déterminer le dernier achat d’un client, un simple appel à MAX_BY vous donnera directement l’information sans vous faire perdre des heures dans les subtilités de l’écriture de la requête.
Voici un petit tableau comparatif qui illustre la différence entre MAX_BY et ROW_NUMBER() :
| Méthode | Complexité | Clarté | Performance |
|---|---|---|---|
| MAX_BY | Faible | Élevée | Optimale |
| ROW_NUMBER() | Élevée | Faible | Moins efficace |
Pour des bonnes pratiques sur les performances en BigQuery, vous pouvez consulter cet article. En résumé, MAX_BY vous offre un moyen puissant de compacter vos requêtes, de les rendre plus lisibles tout en améliorant les performances globales de votre base de données.
Comment intégrer MAX_BY dans vos pipelines et analyses
Intégrer la fonction MAX_BY dans vos pipelines de données, notamment dans un environnement comme BigQuery, n’a rien de sorcier. En fait, cela peut être un véritable jeu d’enfant pour simplifier vos requêtes et extraire des insights précieux. Prenons un cas d’usage typique : vous souhaitez suivre les derniers événements utilisateurs pour optimiser votre tracking comportemental.
Imaginons que vous ayez une table user_events où chaque ligne contient des informations sur les interactions des utilisateurs, telles que user_id, event_name et event_timestamp. Votre objectif est de récupérer le nom de l’événement le plus récent pour chaque utilisateur. Avec MAX_BY, c’est simple. Voici une requête SQL qui fait le boulot :
SELECT
user_id,
MAX_BY(event_name, event_timestamp) AS latest_event
FROM
user_events
GROUP BY
user_id
Ce qui se passe ici, c’est que pour chaque user_id, vous récupérez l’événement associé à la plus grande event_timestamp. Cela simplifie votre requête, car vous n’avez pas besoin de sous-requêtes ou de jointures complexes. Une seule ligne suffit ! En automatisant ce type d’analyses, vous pouvez facilement alimenter des dashboards dynamiques ou des reportings métiers sans vous perdre dans des logiques compliquées.
Pour maximiser l’efficacité de MAX_BY, pensez à le combiner avec d’autres fonctions SQL comme COUNT, SUM, ou même des fenêtres analytiques. Par exemple, vous pourriez vouloir savoir combien de fois chaque événement a eu lieu après avoir récupéré l’événement le plus récent. De cette façon, vous enchaînez des analyses complexes tout en gardant votre code clair et lisible.
En intégrant MAX_BY dans vos pipelines de données, vous vous assurez également que vos reporting restent à jour avec les dernières informations, un avantage crucial pour prendre des décisions éclairées. En fin de compte, la transformation et l’automatisation de vos analyses ne dépendent que de la manière dont vous utilisez ces outils, alors n’hésitez pas à explorer toutes les possibilités offertes par SQL pour optimiser vos workflows.
Alors, MAX_BY est-elle la clé pour simplifier vos requêtes SQL complexes ?
MAX_BY s’impose comme une solution simple, élégante et robuste pour extraire des valeurs associées à un maximum dans vos bases SQL, en particulier sur BigQuery. Elle remplace avec brio des constructions souvent lourdes à maintenir et optimise la performance et lisibilité des requêtes. Adaptée à de nombreuses situations analytiques (tracking, reporting, gestion des commandes), MAX_BY se révèle un atout indispensable pour tout analyste ou ingénieur data souhaitant écrire du SQL clair, performant et fiable.
FAQ
Qu’est-ce que la fonction MAX_BY en SQL ?
Pourquoi utiliser MAX_BY plutôt que ROW_NUMBER() ?
Est-ce que MAX_BY est disponible en dehors de BigQuery ?
Comment utiliser MAX_BY dans une requête groupée ?
Quels cas d’usage tirent vraiment profit de MAX_BY ?
A propos de l’auteur
Franck Scandolera, responsable de l’agence webAnalyste et formateur en Analytics, Data Engineering et automatisation, applique chaque jour ses compétences en SQL et BigQuery pour concevoir des solutions analytiques efficaces, conformes RGPD et adaptées aux besoins métiers. Expert reconnu en pipelines data et automatisation no-code, il accompagne professionnels et entreprises vers une exploitation claire et maitrisée de leurs données.
⭐ 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.






