کد شما باید روی نسخهی استاندارد MySQL قابل اجرا باشد. برای چک کردن سینتکس کد SQL خود میتوانید از این وبسایت کمک بگیرید.
حمید یک برنامهنویس حرفهای است. او اخیراً به آشپزی علاقهمند شده و تصمیم گرفته تا یک وبسایت برای بهاشتراکگذاری دستور پختهای انحصاریاش راهاندازی کند. او میخواهد قابلیتهای پیشرفتهای را در وبسایتش ارائه دهد. برای مثال، این قابلیت که کاربران بتوانند مواد اولیهی موجودشان را در سایت ثبت کرده و سیستم بتواند لیست غذاهایی که با استفاده از مواد اولیهشان قابل پخت هستند را نمایش دهد. همچنین، کاربران امکان امتیازدهی (از ۱ تا ۵) به دستور پختها را دارند.
حمید بهخوبی از پس طراحی جداول دیتابیس سایتش برآمده، اما برای نوشتن کوئریهایش به کمک شما نیاز دارد.
جزئیات پروژه
پایگاه دادهی اولیهی سایت حمید شامل ۶ جدول با اسامی و ساختارهای زیر است:
- جدول کاربران (
users
):
نام ستون | نوع | تعریف | ملاحضات |
---|---|---|---|
id |
int(11) |
شناسهی کاربر | primary key auto_increment |
username |
varchar(255) |
نام کاربری کاربر |
- جدول غذاها (
foods
):
نام ستون | نوع | تعریف | ملاحضات |
---|---|---|---|
id |
int(11) |
شناسهی غذا | primary key auto_increment |
name |
varchar(255) |
نام غذا | |
recipe |
text |
متن دستور پخت غذا |
- جدول مواد اولیه (
ingredients
):
نام ستون | نوع | تعریف | ملاحضات |
---|---|---|---|
id |
int(11) |
شناسهی مادهی اولیه | primary key auto_increment |
name |
varchar(255) |
نام مادهی اولیه | |
price_per_unit |
decimal(10,2) |
قیمت واحد مادهی اولیه |
- جدول مواد اولیهی غذاها (
food_ingredients
):
نام ستون | نوع | تعریف | ملاحضات |
---|---|---|---|
id |
int(11) |
شناسهی مادهی اولیهی غذا | primary key auto_increment |
food_id |
int(11) |
شناسهی غذا | foreign key (foods) |
ingredient_id |
int(11) |
شناسهی مادهی اولیه | foreign key (ingredients) |
amount |
decimal(10,2) |
مقدار مادهی اولیه |
- جدول مواد اولیهی کاربران (
user_ingredients
):
نام ستون | نوع | تعریف | ملاحضات |
---|---|---|---|
id |
int(11) |
شناسهی مادهی اولیهی کاربر | primary key auto_increment |
user_id |
int(11) |
شناسهی کاربر | foreign key (users) |
ingredient_id |
int(11) |
شناسهی مادهی اولیه | foreign key (ingredients) |
amount |
decimal(10,2) |
مقدار مادهی اولیه |
- جدول امتیازات کاربران به غذاها (
ratings
):
نام ستون | نوع | تعریف | ملاحضات |
---|---|---|---|
id |
int(11) |
شناسهی امتیاز | primary key auto_increment |
user_id |
int(11) |
شناسهی کاربر | foreign key (users) |
food_id |
int(11) |
شناسهی غذا | foreign key (foods) |
rate |
tinyint(1) |
امتیاز |
مطلوبات
کوئریهای SQL خواستهشده از شما موارد زیر است (توجه کنید که هر کوئری نمرهای جداگانه دارد و اگر کوئری یک قسمت را نتوانستید بزنید، کوئریهایی که حل کردید را بفرستید و قسمت آن کوئری را خالی بگذارید):
- حمید قبلاً دستور پختهایش را در کانال
@hamid_ashpazbashi2
به اشتراک میگذاشته. حال، نام کاربری کانالش را به@hamid_ashpazbashi
تغییر داده است. او اکنون میخواهد همهی@hamid_ashpazbashi2
های موجود در متن دستور پختها (ستونrecipe
جدولfoods
) را به@hamid_ashpazbashi
تغییر دهد. این کوئری را برای او بنویسید. - شناسه، عنوان، میانگین امتیازات و تعداد آرای ۱۰ غذای برتر را برگردانید (ابتدا برحسب میانگین امتیازات بهصورت نزولی، سپس برحسب تعداد آرا بهصورت نزولی و سپس برحسب شناسهی غذا بهصورت نزولی). میانگین امتیازات را در قالب ستونی با نام
rating
و تعداد آرا را در قالب ستونی با نامrate_count
برگردانید. اگر امتیازی به یکی از غذاهای موجود در نتیجه داده نشده بود، مقدار ستونهایrating
وrate_count
باید صفر باشد. - محتویات جدول غذاها را بههمراه ستون جدیدی با نام
total_price
برگردانید. مقدار این ستون باید برابر با جمع حاصلضرب قیمت واحد مواد اولیهی هر غذا در تعدادشان باشد. اگر مادهی اولیهای برای غذا ثبت نشده بود، مقدار این ستون باید صفر باشد. - شناسهی غذاهایی که کاربر با نام کاربری
quera
با استفاده از مواد اولیهش میتواند بپزد را در قالب ستونی با نامid
برگردانید. نتایج باید بهترتیب نزولی شناسهی غذاها باشند. اگر مادهی اولیهای برای یک غذا ثبت نشده باشد، این غذا نباید در نتیجه وجود داشته باشد.
آنچه باید آپلود کنید
کد خود را در قالب زیر، در یک فایل با پسوند sql
قرار داده و آن را ارسال کنید.
-- Section1
your 1st query here
-- Section2
your 2nd query here
-- Section3
your 3rd query here
-- Section4
your 4th query here
ارسال پاسخ برای این سؤال