basit bir sorgu gibi görünüyor, ancak bunu yapamıyorum, lütfen yardım edin. Bana aşağıdaki gibi bazı kısıtlamalar getirdiler: çoklu alt sorgular ve geçici tablolar kullanma, CTE ve dış uygulama.Spor istatistikleri için TSQL sorgusu Bunu yapamazsınız
And this is the desired result
tablolar şunlardır: Oyun, Takım ve oyuncular.
This is the DB Schema Ben etti ekip 1 için diyelim, çünkü her takımın çoğu değerli oyuncusu nasıl filtrelemek mümkün değilim: Oyuncu 1 2 kez MVP kazandı Oyuncu 2 kazandı 5 kez ve Oyuncu 3 kazan 1 kez MVP
ve hepsini görüyorum, sadece en çok kazanan oyuncu 2'yi görmem gerek.
Bugüne kadar yapmış sorgu:
SELECT
q.Name,
q.Stadium,
q.Logo,
COUNT(q.Played) as Played,
SUM(q.PlayedAtHome) as [Played Home],
SUM(q.PlayedAway) as [Played Away],
SUM(q.Won) as Won,
SUM(q.Lost) as Lost,
MAX(q.BigestWon) as BigestWon,
q.MVP,
Max(mvpXtimes) mvcXtimes
FROM
(
SELECT homeTeam.Name,
homeTeam.Stadium,
homeTeam.Logo,
1 as Played,
1 as PlayedAtHome,
0 as PlayedAway,
mvp.Name as MVP,
COUNT(mvp.Name) as mvpXtimes,
CASE
WHEN (g.HomeScore > g.AwayScore) THEN 1
ELSE 0
END as Won,
CASE
WHEN (g.HomeScore < g.AwayScore) THEN 1
ELSE 0
END as Lost,
CASE
WHEN (g.HomeScore > g.AwayScore) THEN g.HomeScore
ELSE 0
END as BigestWon,
CASE
WHEN (g.HomeScore < g.AwayScore) THEN g.HomeScore
ELSE 0
END as LostScoreLoser
FROM dbo.Games as g
-- Home team
INNER JOIN dbo.Teams homeTeam
ON g.HomeTeamID = homeTeam.TeamID
-- Mvp of the game
INNER JOIN dbo.Players as mvp
ON g.MVPPlayerID = mvp.PlayerID
WHERE g.HomeTeamID = 8
group by homeTeam.Name,
homeTeam.Stadium,
homeTeam.Logo,
mvp.Name,
CASE
WHEN (g.HomeScore > g.AwayScore) THEN 1
ELSE 0
END,
CASE
WHEN (g.HomeScore < g.AwayScore) THEN 1
ELSE 0
END,
CASE
WHEN (g.HomeScore > g.AwayScore) THEN g.HomeScore
ELSE 0
END,
CASE
WHEN (g.HomeScore < g.AwayScore) THEN g.HomeScore
ELSE 0
END
UNION ALL
SELECT awayTeam.Name,
awayTeam.Stadium,
awayTeam.Logo,
1 as Played,
0 as PlayedAtHome,
1 as PlayedAway,
mvp.Name as MVP,
COUNT(mvp.Name) as mvpXtimes,
CASE
WHEN (g.AwayScore > g.HomeScore) THEN 1
ELSE 0
END as Won,
CASE
WHEN (g.AwayScore < g.HomeScore) THEN 1
ELSE 0
END as Lost,
CASE
WHEN (g.AwayScore > g.HomeScore) THEN g.AwayScore
ELSE 0
END as BigestWon,
CASE
WHEN (g.AwayScore < g.HomeScore) THEN g.AwayScore
ELSE 0
END as LostScoreLoser
FROM dbo.Games as g
-- Away team
INNER JOIN dbo.Teams awayTeam
ON g.AwayTeamID = awayTeam.TeamID
-- Mvp of the game
INNER JOIN dbo.Players as mvp
ON g.MVPPlayerID = mvp.PlayerID
WHERE g.AwayTeamID = 8
group by awayTeam.Name,
awayTeam.Stadium,
awayTeam.Logo,
mvp.Name,
CASE
WHEN (g.AwayScore > g.HomeScore) THEN 1
ELSE 0
END,
CASE
WHEN (g.AwayScore < g.HomeScore) THEN 1
ELSE 0
END,
CASE
WHEN (g.AwayScore > g.HomeScore) THEN g.AwayScore
ELSE 0
END,
CASE
WHEN (g.AwayScore < g.HomeScore) THEN g.AwayScore
ELSE 0
END
) as q
GROUP BY q.Name,
q.Stadium,
q.Logo ,
q.MVP
Özür dileriz, SO ödevleriniz için aldatma aracı değildir. Ayrıca, ödeviniz "CTE ve dış uygulama kullanın" diyor, ancak kodunuzda ne CTE ne de bir dış uygulama görüyorum. –
Lütfen kendi başına bir şeyler yapmaya çalışın, tekrarlayın ve sadece gerçekten sıkışmış olduğunuzda, o zaman buraya sorun. –
3 gün boyunca bu sorguyu deniyorum. Sorunumda neyin yanlış olduğunu anlamıyorum, neyse teşekkürler – MarcosF8