الإيرادات الشهرية لكل دولة، العملاء النشطون فقط
تقرير مالي مع مرشح عملاء بنمط 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
- نمط الاستعلام
- قابل للقراءة (CTEs، شرط واحد في كل سطر)
- شرح
- مختصر
الإخراج (مقتطف)
```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؛ يستمر الاستعلام الرئيسي في الاحتفاظ بطلباتهم فقط، يقتطع كل طلب إلى شهره ويجمع الإيرادات حسب الشهر والدولة. النطاق الزمني نصف مفتوح بحيث يُحسب 31 ديسمبر مرة واحدة…