کوئریهای شما باید روی MySQL قابل اجرا باشند.
مسعود قصد دارد مسابقهی محله را اینبار بهصورت آنلاین برگزار کند. او این مسابقات را برگزار کرده و دادههایی را جمعآوری کرده، اما متأسفانه برای کار با این دادهها ناتوان است.
برای این کار به او کمک کنید.
جزئیات پروژه
دادههای اولیه برای تست نمونه را از این لینک دانلود کنید.
ساختار جداول بهشرح زیر است:
جدول users
: از این جدول برای نگهداری اطلاعات کاربران استفاده میشود. ساختار این جدول بهصورت زیر است:
نام ستون | نوع | تعریف |
---|---|---|
id |
BIGINT |
شناسهی کاربر |
name |
VARCHAR(255) |
نام کاربر |
جدول contests
: از این جدول برای نگهداری اطلاعات مسابقات استفاده میشود. ساختار این جدول بهصورت زیر است:
نام ستون | نوع | تعریف |
---|---|---|
id |
BIGINT |
شناسهی مسابقه |
title |
VARCHAR(255) |
عنوان مسابقه |
جدول problems
: از این جدول برای نگهداری سؤالات مسابقات استفاده میشود. ساختار این جدول بهصورت زیر است:
نام ستون | نوع | تعریف |
---|---|---|
id |
BIGINT |
آیدی |
contest_id |
VARCHAR(255) |
آیدی مسابقه |
title |
VARCHAR(255) |
عنوان سوال |
جدول submissions
: از این جدول برای نگهداری ارسالهای کاربران برای سؤالات مسابقات استفاده میشود. ساختار این جدول بهصورت زیر است:
نام ستون | نوع | تعریف |
---|---|---|
id |
BIGINT |
شناسهی ارسال |
user_id |
BIGINT |
شناسهی کاربر |
problem_id |
BIGINT |
شناسهی سؤال |
score |
BIGINT |
امتیاز لحاظشده برای ارسال |
همانطور که در ساختار جداول مشاهده میکنید، هر مسابقه دارای سؤالاتی است و هر کاربر میتواند برای این سؤالات راهحل ارسال کند و امتیاز کسب کنند.
در انتها باید بدانید که جدول امتیازات با در نظر گرفتن بیشترین امتیاز کاربر بهدست میآید، یعنی ممکن است یک کاربر برای یک سؤال چند ارسال داشته باشد. در اینصورت، باید بیشترین امتیاز او برای رتبهبندی در نظر گرفته شود.
مطلوبات
کوئریهای زیر را طوری بنویسید که خروجی خواستهشده بهدست بیاید:
- لیست چالشیترین سؤالات مسابقات: سؤالات مسابقات بهترتیب نزولی تعداد ارسال برای آنها؛ در خروجی باید عنوان سؤال بههمراه عنوان مسابقهی مربوط به آن بهترتیب در قالب ستونهای
p_title
وc_title
وجود داشته باشد. در صورتی که تعداد ارسالهای مربوط به دو ردیف برابر بود، باید ابتدا براساسp_title
و سپس براساسc_title
بهصورت صعودی مرتب شوند. - لیست مسابقات بهترتیب نزولی تعداد شرکتکننده: در خروجی باید عنوان مسابقه در قالب ستونی با نام
title
به همراه تعداد شرکتکنندهها در قالب ستونی با نامamount
وجود داشته باشد. درصورتی که تعداد شرکتکنندههای دو ردیف برابر باشد، باید براساسtitle
بهصورت صعودی مرتب شوند. - جدول امتیازات مسابقهای با عنوان
mahale
: برای جدول امتیازات باید ستونهای نام کاربر با نامname
بههمراه امتیاز او با نامscore
وجود داشته باشد. درصورتی که امتیاز دو ردیف برابر باشد، باید براساسname
بهصورت صعودی مرتب شوند. - پرافتخارترین نفرات در همهی مسابقات: در خروجی باید نام شرکتکننده با نام
name
بههمراه امتیاز کل آن با نامscore
وجود داشته باشد. درصورتی که امتیاز دو ردیف برابر باشد، باید براساس مقدار ستونname
بهصورت صعودی مرتب شوند. - کوئریای بنویسید که عنوان مسابقهای با عنوان
mahale
را بهMosabeghe Mahale
تغییر دهد. - کوئریای بنویسید که تمامی مسابقاتی که ارسالی برای آنها وجود ندارد را حذف کند.
آنچه باید آپلود کنید
پس از طراحی کوئریها، کد خود را در قالب زیر در یک فایل با پسوند .sql
آپلود کنید.
-- Section1
Your first query here
-- Section2
Your second query here
-- Section3
Your third query here
-- Section4
Your fourth query here
-- Section5
Your fifth query here
-- Section6
Your sixth query here
ارسال پاسخ برای این سؤال