私のデータベース プロジェクトでは、オリンピックのデータに関するデータベースを構築する必要がありました。
次のクエリも作成する必要があります。
ユーザーが提供する特定のオリンピックのメダル テーブルを計算します。メダル テーブルには、国の IOC コードに続いて、金、銀、銅、合計メダル数が含まれている必要があります。最初にゴールド、次にシルバー、最後にブロンズの数でソートする必要があります。
基本的に、Medals
オリンピックの試合で一部の参加者が獲得したメダルを含むテーブルがあります。
color
メダルは、私のテーブルのフィールドに「金メダル」「銀メダル」「銅メダル」のように保管されますMedals
。
次のクエリを使用しようとしました:
SELECT q1.country, q1.name as "Game", q1.cntG, q2.cntS, q3.cntB FROM
(
SELECT c.countryName as country, g.name as name, count(m.idMedal) as cntG
FROM Game g
INNER JOIN Participant p
ON p.fkGame = g.idGame
INNER JOIN Country c
ON p.fkCountry = c.idCountry
INNER JOIN Medals m
ON m.fkMedalist = p.idParticipant
WHERE
g.name = "2012 Summer Olympics"
AND m.color like '%Gold%'
GROUP BY c.countryName
ORDER BY c.countryName, cntG DESC
) as q1,
(
SELECT c.countryName as country, g.name as name, count(m.idMedal) as cntS
FROM Game g
INNER JOIN Participant p
ON p.fkGame = g.idGame
INNER JOIN Country c
ON p.fkCountry = c.idCountry
INNER JOIN Medals m
ON m.fkMedalist = p.idParticipant
WHERE g.name = "2012 Summer Olympics"
AND m.color like '%Silver%'
GROUP BY c.countryName
ORDER BY c.countryName, cntS DESC
) as q2,
(
SELECT c.countryName as country, g.name as name, count(m.idMedal) as cntB
FROM Game g
INNER JOIN Participant p
ON p.fkGame = g.idGame
INNER JOIN Country c
ON p.fkCountry = c.idCountry
INNER JOIN Medals m
ON m.fkMedalist = p.idParticipant
WHERE g.name = "2012 Summer Olympics"
AND m.color like '%Bronze%'
GROUP BY c.countryName
ORDER BY c.countryName, cntB DESC
) as q3
GROUP BY q1.country
ORDER BY q1.cntG, q2.cntS, q3.cntB DESC
まあ、それは私にまったく奇妙な結果をもたらします。このクエリに何か問題があることはわかっていますが、それが何であるかを理解できません!
あなたが私を助けてくれることを願っています:)
ありがとう
注: 現時点では、クエリの総数 (割り当てで求められている) を無視しました。最初の部分を構築することを考え出したら、全体を試してみます