如何重写SQL查询以获得一个球队的统计数据与对手的统计数据?
问题描述:
我已经写了一个SQL查询来显示特定团队的时间表以及他们的分数和第一次下降。如何重写SQL查询以获得一个球队的统计数据与对手的统计数据?
SELECT DISTINCT
/*From statsSchedules*/
homeScore
/*From leagueTeams*/
, homeTeam.logoId homeLogoId
, homeTeam.abbrName homeAbbrName
/*From statsTeamStats*/
, homeTeamStats.off1stDowns AS home1stDowns
/*From statsSchedules*/
, awayScore
/*From leagueTeams*/
, awayTeam.logoId awayLogoId
, awayTeam.abbrName awayAbbrName
/*From statsTeamStats*/
, awayTeamStats.off1stDowns AS away1stDowns
FROM statsSchedules
INNER JOIN leagueTeams AS homeTeam
ON statsSchedules.homeTeamId = homeTeam.TeamId
INNER JOIN statsTeamStats AS homeTeamStats
ON statsSchedules.homeTeamId=homeTeamStats.teamId
AND statsSchedules.homeTeamId=homeTeamStats.teamId
AND statsSchedules.scheduleId=homeTeamStats.scheduleId
INNER JOIN leagueTeams AS awayTeam
ON statsSchedules.awayTeamId = awayTeam.teamId
INNER JOIN statsTeamStats AS awayTeamStats
ON statsSchedules.awayTeamId=awayTeamStats.teamId
AND statsSchedules.awayTeamId=awayTeamStats.teamId
AND statsSchedules.scheduleId=awayTeamStats.scheduleId
WHERE awayTeam.abbrName LIKE 'DAL'
AND statsSchedules.stageIndex=1 OR homeTeam.abbrName LIKE 'DAL'
AND statsSchedules.stageIndex=1
ORDER BY `statsSchedules`.`weekIndex` ASC
该查询输出这个..
|homeScore|homeLogoId|homeAbbrName|home1stDowns|awayScore|awayLogoId|awayAbbrName|away1stDowns|
| 24 | 10 | DAL | 12 | 16 | 15 | NYG | 8 |
| 10 | 3 | DEN | 8 | 16 | 10 | DAL | 11 |
| 16 | 6 | ARI | 16 | 22 | 10 | DAL | 9 |
| 34 | 10 | DAL | 12 | 13 | 23 | LAR | 7 |
| 13 | 10 | DAL | 11 | 31 | 19 | GB | 8 |
我想现在要做的是创建一个具有DAL的总得分和对手DAL拿下总积分方面发挥了新表。
我还想要一个显示DAL的1stDowns的列和另一个显示其对手所造成的第一个下降总数的列。
预计
|mainTeamPts|mainTeam1stDowns|opponentsPts|opponents1stDowns|
| 109 | 55 | 86 | 59 |
答
下面是基于小结果表上面的两个例子,他们可能给你如何进行的想法。
在这里展示:SQL Fiddle
的MySQL 5.6架构设置:
CREATE TABLE QryResult
(`homeScore` int, `homeLogoId` int, `homeAbbrName` varchar(3), `home1stDowns` int, `awayScore` int, `awayLogoId` int, `awayAbbrName` varchar(3), `away1stDowns` int)
;
INSERT INTO QryResult
(`homeScore`, `homeLogoId`, `homeAbbrName`, `home1stDowns`, `awayScore`, `awayLogoId`, `awayAbbrName`, `away1stDowns`)
VALUES
(24, 10, 'DAL', 12, 16, 15, 'NYG', 8),
(10, 3, 'DEN', 8, 16, 10, 'DAL', 11),
(16, 6, 'ARI', 16, 22, 10, 'DAL', 9),
(34, 10, 'DAL', 12, 13, 23, 'LAR', 7),
(13, 10, 'DAL', 11, 31, 19, 'GB', 8)
;
查询1:
select
teams.AbbrName, r1.homeScore, r1.home1stDowns, r2.awayScore, r2.away1stDowns
from (
select homeAbbrName AbbrName from QryResult
union
select awayAbbrName from QryResult
) teams
left join (
select homeAbbrName, sum(homeScore) homeScore, sum(home1stDowns) home1stDowns
from QryResult
group by homeAbbrName
) r1 on teams.AbbrName = homeAbbrName
left join (
select awayAbbrName, sum(awayScore) awayScore, sum(away1stDowns) away1stDowns
from QryResult
group by awayAbbrName
) r2 on teams.AbbrName = awayAbbrName
order by teams.AbbrName, homeAbbrName
| AbbrName | homeScore | home1stDowns | awayScore | away1stDowns |
|----------|-----------|--------------|-----------|--------------|
| ARI | 16 | 16 | (null) | (null) |
| DAL | 71 | 35 | 38 | 20 |
| DEN | 10 | 8 | (null) | (null) |
| GB | (null) | (null) | 31 | 8 |
| LAR | (null) | (null) | 13 | 7 |
| NYG | (null) | (null) | 16 | 8 |
查询2:
select
abbrname
, logoid
, sum(score) score
, sum(1stdowns) 1stdowns
from (
select `homeScore` score, `homeLogoId` logoid, `homeAbbrName` abbrname, `home1stDowns` 1stdowns
from QryResult
union all
select `awayScore`, `awayLogoId`, `awayAbbrName`, `away1stDowns`
from QryResult
) d
GROUP BY
abbrname
, logoid
ORDER BY
abbrname
, logoid
| abbrname | logoid | score | 1stdowns |
|----------|--------|-------|----------|
| ARI | 6 | 16 | 16 |
| DAL | 10 | 109 | 55 |
| DEN | 3 | 10 | 8 |
| GB | 19 | 31 | 8 |
| LAR | 23 | 13 | 7 |
| NYG | 15 | 16 | 8 |
+0
你的问题现在解决了吗?你仍然有关于这个答案的问题吗?要接受答案“[**点击Tick **](https://ibb.co/ikqyO6)”以获取更多信息,请参阅[help/accepting](https://stackoverflow.com/help/someone-answers) –
UPADTE你的问题,显示你需要 – scaisEdge
结果你是不是清楚什么表,你wnat外观喜欢。请阅读[mcve]并采取行动(正如您在提问中所述)。对于其中的任何一个,你有什么目标?阅读关于SUM。 – philipxy
好吧我已编辑我的问题,并添加了预期。对不起,我还不熟悉SQL,因此想弄清楚如何正确提问有点困难。 – ssx95351