SQL - Comment afficher la valeur associée à un MIN avec MIN_BY() ?

SQL - Comment afficher la valeur associée à un MIN avec MIN_BY() ?

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 !