国別月間収益(アクティブ顧客のみ)
HAVING 形式の顧客フィルタを使用した財務レポート
入力と出力のプレビューを見る
入力
- クエリは何を返すべきですか?
- Monthly revenue per country for 2025, counting only customers who placed more than 3 orders in 2025. Sort by month, then revenue descending.
- テーブルとカラム(任意)
- orders(id, customer_id, total_cents integer, created_at timestamp) customers(id, country text, signup_at timestamp)
- SQL 方言
- PostgreSQL
- クエリのスタイル
- 読みやすい(CTE、1 行ごとに句)
- 説明
- 簡潔
出力(抜粋)
```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;
```
**スキーマはそのまま使用します。**
CTE は 2025 年に 3 件以上の注文がある顧客を見つけます。メインクエリはそれらの顧客の注文のみを保持し、各注文を月単位に切り捨て、月と国ごとの収益を合計します。日付範囲は半開区間なので、12 月 31 日は一度だけカウントされます…