在我的數據庫項目中,我必須建立一個關於奧運會數據的數據庫。SQL:從相同的表/字段計數,但數值不同
我必須建立以下查詢,以及:
爲用戶提供特定的奧運會獎牌計算表。獎牌表應包含 國家的國際奧委會代碼,其次是金牌,銀牌,銅牌和總獎牌的數量。首先應該是 ,按黃金數量排序,然後是銀色,最後是青銅色。
基本上,我有一個表Medals
,其中包含一些參加者在某些奧運比賽中獲得的獎牌。
獎牌以下列方式儲存:我的牌桌Medals
的color
場中的「金牌」,「銀牌」,「銅牌」。
我嘗試使用下面的查詢:
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
那麼,它給了我完全怪異的結果。我知道這個查詢有問題,但無法弄清楚它是什麼!
希望你能幫助我:)
感謝
注:我忽略了查詢的總數量(如assignement要求)的時刻。一旦我想通的建立第一部分我會盡力總
完全奇怪以什麼方式? – gkalpak
嗯,對我來說已經很晚了,但是可以在'GROUP BY q1.country'之前添加'WHERE q1.country = q2.country AND q1.country = q3.country'。它會更好嗎? – gkalpak
它似乎沒有以獨立的方式計算計數。仍然顯示了一些計數,但他們是錯誤的(就像美國隊在某場比賽中贏得了2200枚金牌)。我的數據庫中的數據不是問題 –