2017-10-19 36 views
0

我已经写了一个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   | 
+2

UPADTE你的问题,显示你需要 – scaisEdge

+1

结果你是不是清楚什么表,你wnat外观喜欢。请阅读[mcve]并采取行动(正如您在提问中所述)。对于其中的任何一个,你有什么目标?阅读关于SUM。 – philipxy

+0

好吧我已编辑我的问题,并添加了预期。对不起,我还不熟悉SQL,因此想弄清楚如何正确提问有点困难。 – ssx95351

回答

0

下面是基于小结果表上面的两个例子,他们可能给你如何进行的想法。

在这里展示: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 

Results

| 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 

Results

| 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) –