**کد شما باید روی نسخهی استاندارد _MySQL_ قابل اجرا باشد.** برای چک کردن سینتکس کد *SQL* خود میتوانید از **[این وبسایت](https://www.eversql.com/sql-syntax-check-validator/)** کمک بگیرید.
---
محمود بهتازگی در تیم فنی *اسنپ باکس* استخدام شده و برای شروع، تسکهای مختلفی به او محول شده است. او باید اطلاعات مختلفی را در *MySQL* دریافت کند تا بتوانند خدمات بهتری به کاربران ارائه دهند.
# جزئیات پروژه
فایل دادههای اولیه برای تست نمونه را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/106800/) دانلود کنید.
جداولی که محمود قرار است با آنها کار کند بهشرح زیر هستند:
1. اطلاعات کاربران (`users`):
| نام ستون | نوع | تعریف | ملاحضات |
|----------|----------------|------------------|------------------------------|
| `id` | `int(11)` | شناسهی کاربر | `primary key auto_increment` |
| `name` | `varchar(255)` | نام کاربر | |
| `phone` | `varchar(255)` | شماره تماس کاربر | |
2. اطلاعات سفیران (`drivers`):
| نام ستون | نوع | تعریف | ملاحضات |
|----------|----------------|------------------|------------------------------|
| `id` | `int(11)` | شناسهی کاربر | `primary key auto_increment` |
| `name` | `varchar(255)` | نام کاربر | |
| `phone` | `varchar(255)` | شماره تماس کاربر | |
3. اطلاعات مرسولات (`deliveries`):
| نام ستون | نوع | تعریف | ملاحضات |
|----------------|------------|----------------------------------|------------------------------|
| `id` | `int(11)` | شناسهی مرسوله | `primary key auto_increment` |
| `user_id` | `int(11)` | شناسهی کاربر | `foreign key (users:id)` |
| `driver_id` | `int(11)` | شناسهی سفیر | `foreign key (drivers:id)` |
| `src` | `point(latitude, longitude)` | نقطهی مبدأ (طول و عرض جغرافیایی) | |
| `dest` | `point(latitude, longitude)` | نقطهی مقصد (طول و عرض جغرافیایی) | |
| `requested_at` | `datetime` | زمان درخواست ارسال مرسوله | |
| `delivered_at` | `datetime` | زمان تحویل مرسوله | |
4. اطلاعات سفارشات (`orders`):
| نام ستون | نوع | تعریف | ملاحضات |
|---------------|-----------------|-------------------------------|-------------------------------|
| `delivery_id` | `int(11)` | شناسهی مرسولهی مربوط به سفارش | `primary key & foreign key (deliveries:id)` |
| `price` | `decimal(10,2)` | قیمت سفارش | |
5. امتیاز کاربران به سفارشات (`rates`):
| نام ستون | نوع | تعریف | ملاحضات |
|---------------|---------------------------------|----------------------------------------------------------------|---------------------------------------------|
| `delivery_id` | `int(11)` | شناسهی مرسولهی مربوط به امتیاز | `primary key & foreign key (deliveries:id)` |
| `rate` | `enum('1', '2', '3', '4', '5')` | امتیاز کاربر به سفارش (۱ به معنای کمترین و ۵ به معنای بیشترین) | |
# مطلوبات
کوئریهای *SQL* خواستهشده از شما موارد زیر است (توجه کنید که هر کوئری نمرهای جداگانه دارد و اگر کوئری یک قسمت را نتوانستید بزنید، کوئریهایی که حل کردید را بفرستید و قسمت آن کوئری را خالی بگذارید):
1. شناسهی کاربرانی که نام آنها با `Ali` آغاز میشود را بهترتیب صعودی برگردانید (بزرگی و کوچکی حروف مهم نیست).
2. مجموع قیمت سفارشات در سال ۲۰۲۰ را برگردانید (یک سفارش در سال ۲۰۲۰ محسوب میشود، اگر زمان درخواست ارسال مرسوله در سال ۲۰۲۰ باشد). نوع دادهی خروجی باید برابر با نوع ستون `price` در جدول سفارشات باشد.
3. شناسهی ۱۰ سفیر برتر را بهترتیب نزولی میانگین امتیازات سفارشات برگردانید. اگر دو سفیر امتیاز یکسانی داشته باشند، ابتدا سفیری باید بیاید که شناسهاش کوچکتر است.
4. شناسهی مرسوله و شناسهی سفیران مربوط به مرسولاتی که ارسال آنها بیشتر یا مساوی ۳ ساعت طول کشیده است را بهترتیب صعودی شناسهی مرسوله برگردانید.
5. نام و شماره تماس افرادی که حداقل ۵ مرسوله با فاصلهی مکانی بزرگتر یا مساوی ۲۰ کیلومتر ارسال کردهاند را بهترتیب صعودی الفبایی براساس نام افراد برگردانید. برای محاسبهی فاصلهی مکانی، از طول و عرض جغرافیایی مبدأ و مقصد استفاده کنید.
**نکته:** نام ستونهای خروجی مهم نیست. صرفاً ترتیب آنها مهم است.
# آنچه باید آپلود کنید
کد خود را در قالب زیر، در یک فایل با پسوند `.sql` قرار داده و آن را ارسال کنید (فایل را زیپ نکنید).
```sql
-- Section1
your 1st query here
-- Section2
your 2nd query here
-- Section3
your 3rd query here
-- Section4
your 4th query here
-- Section5
your 5th query here
```