■ 概要
・サイト:TECH Pjin(テックプロジン)
・上記のSQL問題を、通常解答とサブクエリ使用に書き換えました。
・使用SQLは、Postgresqlです。
■ コード記載
・問5, 問6, 問8
sql 01.sql
-------------- Q 08 - 02 (サブクエリ,副問い合わせ)
--- 問題:各ポジションごとの総得点を表示してください。
--- players, goals
SELECT
TT.ポジション,
TT.ゴール数
FROM
(
SELECT
P.POSITION AS ポジション,
COUNT(G.ID) AS ゴール数
FROM
GOALS G
JOIN PLAYERS P
ON G.PLAYER_ID = P.ID
GROUP BY
P."position"
) TT
ORDER BY
TT.ゴール数 DESC;
-------------- Q 08
--- 問題:各ポジションごとの総得点を表示してください。
--- players, goals
SELECT
P."position" AS ポジション,
COUNT(G.ID) AS ゴール数
FROM
PLAYERS P
JOIN GOALS G
ON G.PLAYER_ID = P.ID
GROUP BY
P."position"
ORDER BY
ゴール数 DESC;
------------- Q 06
--- 問題:すべての選手を対象として選手ごとの得点ランキングを表示してください。(SELECT句で副問合せを使うこと)
--- players , goals
SELECT
P.NAME,
P.POSITION,
P.CLUB,
(
SELECT
COUNT(ID)
FROM
GOALS G
WHERE
G.PLAYER_ID = P.ID
) AS TT
FROM
PLAYERS P
ORDER BY
TT DESC;
-------------- Q 05 - 2 副問い合わせ(サブクエリ) 書き方
--- 問題:キックオフ日時と対戦国の国名をキックオフ日時の早いものから順に表示してください。
--pairings countries
SELECT
P.KICKOFF,
(
SELECT
NAME
FROM
COUNTRIES C
WHERE
C.ID = P.MY_COUNTRY_ID
) AS 国名01,
(
SELECT
NAME
FROM
COUNTRIES C2
WHERE
C2.ID = P.ENEMY_COUNTRY_ID
) AS 国名02
FROM
PAIRINGS P
ORDER BY
P.KICKOFF ASC;
-------------- Q 05
--- 問題:キックオフ日時と対戦国の国名をキックオフ日時の早いものから順に表示してください。
--pairings countries
SELECT
P.KICKOFF,
C.NAME AS 国名01,
C2.NAME AS 国名02
FROM
PAIRINGS P
JOIN COUNTRIES C
ON C.ID = P.MY_COUNTRY_ID JOIN COUNTRIES C2
ON C2.ID = P.ENEMY_COUNTRY_ID
ORDER BY
KICKOFF ASC;
---------------------------- END