Muster
Ein Histogramm in SQL
Werte pro Klasse fester Breite zählen und dabei die leeren Klassen behalten.
Die Klasse eines Werts ist FLOOR(x / width) * width. Zählen Sie pro Klasse, dann LEFT JOIN der Zählungen auf jede
Klasse aus generate_series(0, last_bin, width) und COALESCE auf 0: Ohne die Serie verschwindet eine leere Klasse, und
die Form lügt. Die Wahl der Breite ist die Analyse: zu breit verbirgt die Form, zu schmal zeigt Rauschen.
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_start | orders | bar |
|---|---|---|
| 0 | 2011 | ████████████████████████████████████████ |
| 100 | 420 | ████████ |
| 200 | 45 | |
| 300 | 17 | |
| 400 | 6 | |
| 500 | 1 |
Üben:A histogram in SQL