کوئرینویس — ایجنتِ هوشِ مصنوعیِ فارسی
کوئریِ SQL
کوئرینویسِ چیستا چه میکند؟
- درخواستت را به فارسی میگیری و اگر اطلاعاتِ ضروری کم باشد سؤال میپرسد.
- از پروفایلِ برند و کارهای قبلیات استفاده میکند تا خروجی مخصوصِ کسبوکارِ تو باشد.
- خروجی را یک ایجنتِ بازبین کنترلِ کیفیت میکند.
- فایلِ آماده (Word، Excel، صفحهٔ وب یا پست) تحویل میدهد که قابلِ ویرایش است.
چه چیزی تحویل میگیری
🎁 کوئریِ SQL کامل + توضیح
نمونهٔ واقعیِ خروجی
درخواست: «کوئری برای ۱۰ مشتریِ پرخریدِ ماه» · کنترلِ کیفیت: 9 از ۱۰
این کوئری ۱۰ مشتری را بر اساس مجموع مبلغ خریدهای قطعی در ماه جاری رتبهبندی میکند. فرض شده جداول customers و orders هستند، مبلغ نهایی در total_amount ذخیره میشود و وضعیت سفارش قطعی paid یا completed است.
کوئری
```sql SELECT c.id AS customer_id, c.full_name, COUNT(o.id) AS order_count, SUM(o.total_amount) AS total_purchase FROM customers AS c JOIN orders AS o ON o.customer_id = c.id WHERE o.created_at >= DATE_TRUNC('month', CURRENT_DATE) AND o.created_at < DATE_TRUNC('month', CURRENT_DATE) + INTERVAL '1 month' AND o.status IN ('paid', 'completed') GROUP BY c.id, c.full_name ORDER BY total_purchase DESC, order_count DESC, c.id LIMIT 10; ```
توضیح
این نسخه برای PostgreSQL نوشته شده است. بازهٔ زمانی بهصورت نیمهباز تعریف شده؛ یعنی از ابتدای ماه جاری تا پیش از ابتدای ماه بعد. این روش، ساعت و دقیقهٔ سفارشهای روز آخر ماه را نیز درست پوشش میدهد. رتبهبندی ابتدا بر اساس مجموع مبلغ خرید، سپس در صورت تساوی بر اساس تعداد سفارش انجام میشود. شرط وضعیت نیز سفارشهای لغوشده، ناموفق یا مرجوعی را کنار میگذارد؛ مقادیر وضعیت را با دادههای واقعی سامانه هماهنگ کنید. منظور این کوئری ماه میلادی جاریِ تقویم پایگاه داده است. اگر گزارش باید بر مبنای ماه شمسی باشد، تاریخ شروع و پایان ماه شمسی را از برنامه بهصورت پارامتر ارسال کنید و بهجای DATE_TRUNC از :start_date و :end_date استفاده کنید.
- اگر معیار «پرخرید» تعداد خرید است، جای دو عبارت نخست ORDER BY را عوض کنید.
- اگر total_amount مبلغ پس از تخفیف و مرجوعی نیست، ستون مبلغ خالص واقعی را جایگزین کنید.
- اگر زمانها به UTC ذخیره شدهاند، منطقهٔ زمانی گزارش را پیش از تعیین مرز ماه مشخص کنید.
| نام فرضی | کاربرد |
|---|---|
| customers.id | شناسهٔ مشتری |
| customers.full_name | نام مشتری |
| orders.customer_id | ارتباط سفارش با مشتری |
| orders.created_at | زمان ثبت یا قطعیشدن سفارش |
| orders.total_amount | مبلغ نهایی سفارش |
| orders.status | وضعیت سفارش |
نسخهٔ پارامتری برای ماه دلخواه یا ماه شمسی
```sql SELECT c.id AS customer_id, c.full_name, COUNT(o.id) AS order_count, SUM(o.total_amount) AS total_purchase FROM customers AS c JOIN orders AS o ON o.customer_id = c.id WHERE o.created_at >= :start_date AND o.created_at < :end_date AND o.status IN ('paid', 'completed') GROUP BY c.id, c.full_name ORDER BY total_purchase DESC, order_count DESC, c.id LIMIT 10; ``` :start_date باید ابتدای ماه و :end_date ابتدای ماه بعد باشد؛ برای نمونه، این دو مقدار میتوانند در لایهٔ برنامه از تاریخ شمسی به تاریخ قابلذخیره در پایگاه داده تبدیل شوند.
نکاتِ ایندکس/کارایی
برای جدول بزرگ، ایندکسی که فیلتر تاریخ و وضعیت و سپس اتصال به مشتری را پوشش دهد مفید است. ترتیب دقیق ستونها باید با توزیع داده و EXPLAIN ANALYZE بررسی شود.
- ایندکس پیشنهادی عمومی: CREATE INDEX idx_orders_status_created_customer ON orders (status, created_at, customer_id);
- اگر بیشتر سفارشها قطعیاند و فیلتر وضعیت قدرت انتخاب کمی دارد، ایندکس (created_at, customer_id) ممکن است مناسبتر باشد.
- از اعمال تابع روی o.created_at در بخش WHERE خودداری شده تا پایگاه داده بتواند از ایندکس بازهای استفاده کند.
- برای گزارشهای پرتکرار و دادههای بسیار حجیم، جدول خلاصهٔ فروش روزانه یا ماهانه بررسی شود.
| بررسی | هدف |
|---|---|
| EXPLAIN ANALYZE | اطمینان از استفادهٔ مؤثر از ایندکس |
| نوع total_amount | ترجیح NUMERIC/DECIMAL برای مبالغ مالی |
| منطقهٔ زمانی | جلوگیری از جابهجایی سفارش در مرز ماه |
| وضعیت مرجوعی | محاسبهٔ مبلغ خالص بهجای فروش ناخالص |
نمونهدرخواستها
هزینه
پرداخت به اندازهٔ مصرف — معمولاً چند هزار تومان برای هر کار؛ قبل از اجرا تخمینِ هزینه را میبینی.
✨ همین را برای کسبوکارِ من بساز