Date de sortie
July 30, 2024
Auteur
Bertrand Fabre
“J’ai le montant minimum d’achat client par jour. Et maintenant, je me demande comment récupérer simplement le client associé à cette dépense.”.
Sur BigQuery, il existe une fonction qui répond directement à ce besoin : c’est MIN_BY().
Voyons la syntaxe :
MIN_BY(value, expr)
- value : c’est la colonne dont nous voulons récupérer la valeur ;
- expr : c’est la colonne pour laquelle nous avons calculé le minimum (mais dans une autre ligne du SELECT).
🎯 Avec un exemple, ça s’éclaircit toujours un peu :
WITH sales AS (
SELECT 1 AS sale_id, DATE '2024-07-13' AS sale_date, 100 AS amount, 'C001' AS customer_id UNION ALL
SELECT 2 AS sale_id, DATE '2024-07-13' AS sale_date, 200 AS amount, 'C002' AS customer_id UNION ALL
SELECT 3 AS sale_id, DATE '2024-07-13' AS sale_date, 150 AS amount, 'C003' AS customer_id UNION ALL
SELECT 4 AS sale_id, DATE '2024-07-14' AS sale_date, 250 AS amount, 'C004' AS customer_id UNION ALL
SELECT 5 AS sale_id, DATE '2024-07-14' AS sale_date, 300 AS amount, 'C005' AS customer_id UNION ALL
SELECT 6 AS sale_id, DATE '2024-07-14' AS sale_date, 220 AS amount, 'C006' AS customer_id UNION ALL
SELECT 7 AS sale_id, DATE '2024-07-15' AS sale_date, 180 AS amount, 'C007' AS customer_id UNION ALL
SELECT 8 AS sale_id, DATE '2024-07-15' AS sale_date, 260 AS amount, 'C008' AS customer_id UNION ALL
SELECT 9 AS sale_id, DATE '2024-07-15' AS sale_date, 240 AS amount, 'C009' AS customer_id UNION ALL
SELECT 10 AS sale_id, DATE '2024-07-15' AS sale_date, 280 AS amount, 'C010' AS customer_id
)
SELECT
sale_date,
MIN(amount) AS min_sale_amount,
MIN_BY(customer_id, amount) AS customer_with_min_sale
FROM sales
GROUP BY sale_date
ORDER BY sale_date;
Voici le résultat qui s’affiche :
sale_date | min_sale_amount | customer_with_min_sale |
2024-07-13 | 100 | C001 |
2024-07-14 | 220 | C006 |
2024-07-15 | 180 | C007 |
Nous avons donc pour chaque jour le jour en question, le montant minimum d’achat et le client associé à ce minimum.
Merci de votre lecture !