**کد شما باید روی MySQL قابل اجرا باشد.** برای چک کردن سینتکس کد *SQL* خود میتوانید از **[این وبسایت](https://www.eversql.com/sql-syntax-check-validator/)** کمک بگیرید.
---
در این سؤال، پایگاه دادهی یک شرکت فروش آنلاین که وظیفهی فروش محصولات از برندهای مختلف را دارد، در اختیار شما قرار گرفته است.
# جزئیات پروژه
دادههای سؤال را از [این لینک](/contest/assignments/50382/download_problem_initial_project/171627/) دانلود کنید.
ساختار جداول بهشرح زیر است:
**جدول `customers`**: از این جدول برای نگهداری اطلاعات مشتریان استفاده میشود. ساختار این جدول بهصورت زیر است:
|نام ستون|نوع|تعریف|
|:-------|:--|----:|
|`customerNumber`|`INT`|شناسهی مشتری|
|`customerName`|`VARCHAR(50)`|نام مشتری|
|`contactLastName`|`VARCHAR(50)`|نام مخاطب|
|`contactFirstName`|`VARCHAR(50)`|فامیلی مخاطب|
|`phone`|`VARCHAR(50)`|شماره تلفن مشتری|
|`addressLine1`|`VARCHAR(50)`|خط اول آدرس|
|`addressLine2`|`VARCHAR(50)`|خط دوم آدرس|
|`city`|`VARCHAR(50)`|شهر|
|`state`|`VARCHAR(50)`|ایالت|
|`postalCode`|`VARCHAR(15)`|کد پستی|
|`country`|`VARCHAR(50)`|کشور|
|`salesRepEmployeeNumber`|`INT`|شماره کارمند فروش مربوطه|
|`creditLimit`|`DECIMAL(10,2)`|محدودیت بودجه|
**جدول `employees`**: از این جدول برای نگهداری اطلاعات کارمندان استفاده میشود. ساختار این جدول بهصورت زیر است:
|نام ستون|نوع|تعریف|
|:-------|:--|----:|
|`employeeNumber`|`INT`|شناسهی کارمند|
|`lastName`|`VARCHAR(50)`|فامیلی کارمند|
|`firstName`|`VARCHAR(50)`|نام کارمند|
|`extension`|`VARCHAR(10)`|اضافه|
|`email`|`VARCHAR(100)`|ایمیل|
|`officeCode`|`VARCHAR(10)`|کد دفتر|
|`reportsTo`|`INT`|گزارش میدهد به کارمند|
|`jobTitle`|`VARCHAR(50)`|شغل|
**جدول `offices`**: از این جدول برای نگهداری اطلاعات دفترها استفاده میشود. ساختار این جدول بهصورت زیر است:
|نام ستون|نوع|تعریف|
|:-------|:--|----:|
|`officeCode`|`VARCHAR(10)`|کد دفتر|
|`city`|`VARCHAR(50)`|شهر|
|`phone`|`VARCHAR(50)`|تلفن|
|`addressLine1`|`VARCHAR(50)`|خط اول آدرس|
|`addressLine2`|`VARCHAR(50)`|خط دوم آدرس |
|`state`|`VARCHAR(50)`|ایالت|
|`country`|`VARCHAR(50)`|کشور|
|`postalCode`|`VARCHAR(15)`|کد پستی|
|`territory`|`VARCHAR(10)`|منطقه|
**جدول `orderdetails`**: از این جدول برای نگهداری جزئیات سفارشها استفاده میشود. ساختار این جدول بهصورت زیر است:
|نام ستون|نوع|تعریف|
|:-------|:--|----:|
|`orderNumber`|`INT`|شناسهی سفارش|
|`productCode`|`VARCHAR(15)`|شناسهی محصول|
|`quantityOrdered`|`int`|تعداد سفارش|
|`priceEach`|`DECIMAL(10,2)`|قیمت به ازای هر یک عدد محصول|
|`orderLineNumber`|`SMALLINT`|شناسه خط تولید|
**جدول `orders`**: از این جدول برای نگهداری سفارشها استفاده میشود. ساختار این جدول بهصورت زیر است:
|نام ستون|نوع|تعریف|
|:-------|:--|----:|
|`orderNumber`|`INT`|شناسهی سفارش|
|`orderDate`|`DATE`|تاریخ سفارش|
|`requiredDate`|`DATE`|تاریخ نیاز|
|`shippedDate`|`DATE`|تاریخ ارسال|
|`status`|`VARCHAR(15)`|وضعیت ارسال|
|`comments`|`TEXT`|نظرات ارسال|
|`customerNumber`|`INT`|شناسه مشتری|
**جدول `payments`**: از این جدول برای نگهداری جزئیات پرداختها استفاده میشود. ساختار این جدول بهصورت زیر است:
|نام ستون|نوع|تعریف|
|:-------|:--|----:|
|`customerNumber`|`INT`|شناسهی مشتری|
|`checkNumber`|`VARCHAR(15)`|شماره چک|
|`paymentDate`|`DATE`|تاریخ پرداخت|
|`amount`|`DECIMAL(10,2)`|امقدار پرداخت|
**جدول `productlines`**: از این جدول برای نگهداری خط تولید ها استفاده میشود. ساختار این جدول بهصورت زیر است:
|نام ستون|نوع|تعریف|
|:-------|:--|----:|
|`productLine`|`VARCHAR(15)`|شناسهی خط تولید|
|`textDescription`|`VARCHAR(4000)`|توضیحات|
|`htmlDescription`|`MEDIUMTEXT`|لینک توضیحات|
|`image`|`MEDIUMBLOB`|عکس|
**جدول `products`**: از این جدول برای نگهداری اطلاعات محصولات استفاده میشود. ساختار این جدول بهصورت زیر است:
|نام ستون|نوع|تعریف|
|:-------|:--|----:|
|`productCode`|`VARCHAR(15)`|شناسهی محصول|
|`productName`|`VARCHAR(70)`|نام محصول|
|`productLine`|`VARCHAR(50)`|شناسه خط تولید|
|`productScale`|`VARCHAR(10)`|اسکیل محصول|
|`productVendor`|`VARCHAR(50)`|برند محصول|
|`productDescription`|`TEXT`|توضیحات محصول|
|`quantityInStock`|`SMALLINT`|تعداد موجود|
|`buyPrice`|`DECIMAL(10,2)`|قیمت خرید|
|`MSRP`|`DECIMAL(10,2)`|قیمت فروش|
# مطلوبات
کوئریهای زیر را طوری بنویسید که خروجی خواستهشده بهدست بیاید:
1. لیست کارمندان با بیشترین مشتری: شناسه کارمندان را در یک ستون با نام `employeeNumber` و اسم و فامیل کارمندان را با یک *space* به هم بچسبانید و در یک ستون با نام `Name` و تعداد مشتریهای آن کارمند را در یک ستون با نام `CustomersCount` قرار دهید و به ترتیب نزولی بر اساس تعداد مشتریان مرتب کنید. اگر تعداد مشتریان دو کارمند یکسان بود، آن سطرها را بهترتیب صعودی شناسهی کارمند مرتب کنید.
2. رتبهبندی سفارشها براساس هر مشتری: شناسهی ۵ مشتریای که مجموع مبلغ سفارشهایشان بیشتر از بقیه است را بهترتیب نزولی مجموع مبلغ سفارشها در یک ستون با نام `customerNumber` برگردانید. **تضمین میشود** که مجموع مبالغ سفارشهای این مشتریان با یکدیگر متفاوت است.
3. رتبهبندی کالاها بر اساس ارزششان (سود خالص) در خط تولیدشان: در ستون اول با نام `productline` شناسه خط تولید بیاید و در ستون دوم، نام کالا در ستونی با نام `productName` بیاید و در ستون سوم (با نام `net_profit`) سود خالصی که کالا میدهد یعنی «قیمت فروش منهای قیمت خرید»، تعداد موجود در انبار را در ستونی با نام `quantityInStock` بریزید و در ستون آخر با نام `net_profit_rank`، رتبهی هر محصول بر اساس ارزشش در هر خط تولید را بریزید. رتبهی محصولات به گونهای باشد که محصولی که ارزشش بیشتر است، عدد رتبهاش کمتر باشد. **تضمین میشود** که سود خالص محصولات با یکدیگر متفاوت است. سطرهای خروجی باید بهترتیب صعودی شناسهی محصول باشند.
**نکته:** برای بخش سوم دقت کنید که حتما `productline`ها در هر دو جدول `productline` و `products` موجود باشد.
# آنچه باید آپلود کنید
کد خود را در حتما در قالب زیر، در یک فایل با پسوند `.sql` قرار دهید و بدون زیپ کردن، آن را ارسال کنید:
```sql
-- Section1
Your first query here
-- Section2
Your second query here
-- Section3
Your third query here
```