ساعت
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ساعت
دقیقه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
دقیقه
ثانیه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ثانیه

کد شما باید روی PostgreSQL قابل اجرا باشد.


در این سوال، بخشی از پایگاه داده مربوط به مسابقات فوتبال اروپا در اختیار شما قرار گرفته است.

جزئیات پایگاه‌داده

داده‌های اولیه برای تست نهایی را از این لینک دانلود کنید.

توضیحات در مورد داده‌های اولیه

در فایل football.zip فایلی به اسم initial.sql وجود دارد.

ابتدا پایگاه‌داده‌ای با نام football در سیستم خود را بسازید و با اجرای این فایل برروی این پایگاه‌داده، همه جداول و سطرهایی که برای تست‌ نهایی مورد استفاده قرار می‌گیرد در سیستم شما ایجاد می‌شود.

توضیحات جداول دیتابیس

ساختار جداول به‌شرح زیر است:

جدول players: از این جدول برای نگه‌داری اطلاعات بازیکن‌ها استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
player_id integer شناسه‌ی بازیکن
current_club_id integer شناسه‌ی باشگاه فعلی بازیکن
player_code character varying(64) کد بازیکن (نام کامل بازیکن)
country_of_birth character varying(32) کشور تولد بازیکن
city_of_birth character varying(64) شهر تولد بازیکن
country_of_citizenship character varying(32) کشور ملیت بازیکن
date_of_birth date تاریخ تولد بازیکن
sub_position character varying(32) تخصص دوم بازیکن
position character varying(16) تخصص اول بازیکن
foot character varying(8) پای تخصصی بازیکن
height_in_cm integer قد بازی کن به سانتی متر
contract_expiration_date date تاریخ انقضای قرارداد بازیکن

جدول clubs: از این جدول برای نگه‌داری اطلاعات باشگاه‌ها استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
club_id integer شناسه‌ی باشگاه
name character varying(64) نام باشگاه
domestic_competition_id character varying(4) لیگ باشگاه
squad_size integer اندازه تیم
foreigners_number integer تعداد افراد خارجی تیم
national_team_players integer تعداد بازیکن‌های تیم ملی
stadium_name character varying(64) نام استادیوم اختصاصی باشگاه
stadium_seats integer کشور ملیت بازیکن
net_transfer_record character varying(16) ارزش خالص باشگاه

جدول competitions: از این جدول برای نگه‌داری اطلاعات مسابقات استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
competition_id character varying(4) شناسه مسابقات
name character varying(64) نام مسابقات
type character varying(32) نوع مسابقات
country_name character varying(16) کشور مسابقات

جدول games: از این جدول برای نگه‌داری اطلاعات بازی‌ها استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
game_id integer شناسه‌ی بازی
competition_id character varying(4) شناسه سری مسابقات
season integer فصل برگذاری بازی
date date تاریخ بازی
home_club_id integer شناسه‌ی تیم (باشگاه) میزبان
away_club_id integer شناسه‌ی تیم مهمان
home_club_goals integer اتعداد گل تیم میزبان
away_club_goals integer تعداد گل تیم مهمان
stadium character varying(64) نام استادیوم بازی
attendance integer تعداد تماشاگر‌ها

جدول apearances: از این جدول برای نگه‌داری اطلاعات حضور بازیکن‌ها در بازی استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
appearance_id character varying(16) شناسه‌ی جدول
game_id integer شناسه‌ی بازی
player_id integer شناسه‌ی بازیکن
yellow_cards integer تعداد کارت زرد‌های بازیکن
red_cards integer تعداد کارت قرمز‌های بازیکن
goals integer تعداد گل‌های بازیکن
assists integer تعداد پاس گل‌های بازیکن
minutes_played integer تعداد دقایقی که بازیکن بازی کرده‌است

جدول game_events: از این جدول برای نگه‌داری اطلاعات اتفاق‌های مسابقه (گل، موقیت گل، پنالتی و ...)استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
game_event_id integer شناسه‌ی جدول
game_id integer شناسه‌ی بازی
minute integer زمان(دقیقه) اتفاق
type character varying(16) نوع اتفاق
player_id integer شناسه‌ی بازیکن اصلی اتفاق
player_in_id integer شناسه‌ی بازیکن که از گل جلوگیری کرده است
player_assist_id integer شناسه‌ی بازیکنی که پاس گل داده است

مطلوبات

۱. لیستی از ارزش خالص باشگاه را به صورت عددی (integer).

توضیحات مربوط به کوئری اول

نام باشگاه را در ستونی با نام name و ارزش خالص هر باشگاه را در ستونی با نام total نمایش دهید. توجه کنید خروجی شما باید به ترتیب نزولی بر حسب ارزش خالص باشگاه و در صورت که این مقدار برابر بود بر اساس نام باشگاه به‌صورت صعودی مرتب شود.

توجه

دقت داشته‌باشید در صورتی که ارزش خالص تیم مقدار +-0 داشت آن را به صورت 0 نمایش دهید. همچنین نماد k معادل هزار و نماد m معادل میلیون می‌باشد.

3 سطر اول خروجی شما باید به شکل زیر باشد.

name total
Villarreal Club de Fútbol S.A.D. 99400000
Brighton and Hove Albion Football Club 86400000
Verona Hellas Football Club 84300000

۲. مجموع تعداد کارت‌های زرد و قرمز هر بازیکن در هر سری مسابقات را نمایش دهید.

توضیحات مربوط به کوئری دوم

نام یا همان کد بازیکن را در ستونی به نام player_name و نام سری مسابقات را در ستونی با نام competition_name ،تعداد کارت زردهای بازیکن در آن سری مسابقات را در ستونی با نام total_yellow_cards و تعداد کارت زردهای بازیکن در آن سری مسابقات را در ستونی با نام total_red_cards قرار دهید. ستون‌ها را ابتدا برحسب نام بازیکن به‌صورت صعودی , سپس برحسب تعداد کارت‌های زرد و سپس قرمز، به‌صورت نزولی و در نهایت براساس نام سری مسابقات به‌صورت صعودی مرتب کنید.

توجه

هنگامی که مجموع کارت‌های زرد و مجموع کارت‌های زرد قرمز در سری مسابقاتی برای بازیکنی صفر باشد (بازیکن هیچ‌ کارتی دریافت نکرده باشد)، را نمایش ندهید.

3 سطر اول خروجی شما باید به شکل زیر باشد.

player_name competition_name total_yellow_cards total_red_cards
aaron-appindangoye super-lig 6 0
aaron-appindangoye europa-league 1 0
aaron-boupendza super-lig 7 0

۳. سری مسابقات را بر حسب مجموع تعداد اتفاق‌های آن (تعداد گل‌ها، موقیت‌های گل، کارت‌ها و ... ) رتبه بندی کنید.

توضیحات مربوط به کوئری سوم

رتبه سری مسابقات بر اساس مجموع تعداد اتفاق‌های آن (پر حادثه‌ترین رتبه اول) را در ستونی با نام ranking و نام سری مسابقات را در ستونی با نام name و تعداد اتفاق‌های در آن سری مسابقات را در ستونی با نام events قرار دهید. ستون‌ها را ابتدا برحسب رتبه، سپس براساس نام سری مسابقات به‌صورت صعودی مرتب کنید.

توجه

اگر رتبه دو سری مسابقات با بیشترین تعداد حوادث، یکسان بود، هردو رتبه یک می‌شوند و سری مسابقات بعدی رتبه‌اش دو می‌شود، این قانون برای تمامی رتبه‌ها صادق است.

3 سطر آخر خروجی شما باید به شکل زیر باشد.

ranking name events
39 johan-cruijff-schaal 47
40 trophee-des-champions 45
41 ukrainian-super-cup 33

۴.لیستی از بازیی‌ها، استادیوم آن بازی و بازیکن‌هایی که هنگام مسابقه حداقل 35 سال داشته‌اند به همراه تعداد گل‌های زده شده توسط آن بازیکن و سن‌ وی در آن بازی.

توضیحات مربوط به کوئری چهارم

نام یا همان کد بازیکن را در ستونی به نام player_code, شناسه بازی را در ستونی با نام game_id, استادیومی که بازی در آن انجام شده را در ستونی به نام stadium، سن بازیکن را در آن مسابقه را در ستونی با نام age_at و تعداد گل‌های زده شده توسط بازیکن در آن بازی را در ستونی به ‌نام total_goals قرار دهید. ستون‌ها را ابتدا برحسب نام بازیکن به‌صورت صعودی , سپس برحسب سن بازیکن در آن بازی به‌صورت نزولی و سپس برحسب تعداد گل به‌صورت نزولی, سپس براساس نام سری استادیوم و درنهایت براساس شناسه بازی به‌صورت صعودی مرتب کنید.

توجه

فقط بازیکن‌هایی را که حداقل یک گل در این بازی‌ها زده‌اند، نمایش دهید.

player_code game_id stadium age_at total_goals
adam-le-fondre 4121036 Easter Road Stadium 37 1
adam-le-fondre 4120961 Global Energy Stadium 37 1
adam-le-fondre 4120853 Easter Road Stadium 36 1

روش پیاده‌سازی

در یک فایل با نام code.sql کد خود را قرار دهید و آن را فشرده (zip ) کنید و در سایت بارگذاری نمایید. کد شما باید به صورت زیر باشد(نام فایل zip مهم نیست).

-- Section1
   Your first query here
-- Section2
   Your second query here
-- Section3
   Your third query here
-- Section4
   Your fourth query here
SQL

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.