Měsíční příjem podle země, pouze aktivní zákazníci
Finanční report s filtrem zákazníků ve stylu HAVING
Zobrazit náhled vstupu a výstupu
Vstup
- Co by měl dotaz vracet?
- Monthly revenue per country for 2025, counting only customers who placed more than 3 orders in 2025. Sort by month, then revenue descending.
- Tabulky a sloupce (volitelné)
- orders(id, customer_id, total_cents integer, created_at timestamp) customers(id, country text, signup_at timestamp)
- SQL dialekt
- PostgreSQL
- Styl dotazu
- Čitelný (CTE, jedna klauzule na řádek)
- Vysvětlení
- Stručné
Výstup (úryvek)
```sql
WITH active_customers AS (
SELECT o.customer_id
FROM orders AS o
WHERE o.created_at >= DATE '2025-01-01'
AND o.created_at < DATE '2026-01-01'
GROUP BY o.customer_id
HAVING COUNT(*) > 3
)
SELECT
DATE_TRUNC('month', o.created_at)::date AS month,
c.country,
SUM(o.total_cents) / 100.0 AS revenue
FROM orders AS o
JOIN active_customers AS a ON a.customer_id = o.customer_id
JOIN customers AS c ON c.id = o.customer_id
WHERE o.created_at >= DATE '2025-01-01'
AND o.created_at < DATE '2026-01-01'
GROUP BY 1, 2
ORDER BY month, revenue DESC;
```
**Schéma použito tak, jak je.**
CTE najde zákazníky s více než třemi objednávkami v roce 2025; hlavní dotaz ponechá jen jejich objednávky, ořízne každou objednávku na měsíc a sečte příjem podle měsíce a země. Rozsah dat je polouzavřený, takže 31. prosinec se počítá jen jednou…