SQL Dojo Bêta
Technique

Un histogramme en SQL

Compter les valeurs par tranche de largeur fixe, en gardant les tranches vides.

La tranche d'une valeur est FLOOR(x / largeur) * largeur. Comptez par tranche, puis faites un LEFT JOIN des comptes sur chaque tranche de generate_series(0, dernière_tranche, largeur) et un COALESCE à 0 : sans la série, une tranche vide disparaît et la forme ment. Choisir la largeur est l'analyse : trop large cache la forme, trop étroite montre du bruit.

WITH baskets AS (
  SELECT o.order_id, SUM(l.quantity * l.unit_price) AS total
  FROM orders o JOIN order_lines l ON l.order_id = o.order_id
  GROUP BY o.order_id
)
SELECT CAST(FLOOR(total / 100) * 100 AS INTEGER) AS bin_start,
       COUNT(*) AS orders,
       repeat('█', CAST(FLOOR(COUNT(*) / 50) AS INTEGER)) AS bar
FROM baskets
GROUP BY 1
ORDER BY 1;
bin_startordersbar
02011████████████████████████████████████████
100420████████
20045
30017
4006
5001
L’essayer en Randori