【问题标题】:Multiple Select queries in MySQLMySQL 中的多选查询
【发布时间】:2014-07-09 03:25:14
【问题描述】:

我有一张这样的桌子。

home team | away team | attendance | home or away|
       SD |        WP |    SD OVAL |        4000 | H |
       WP |        SD |    SD OVAL |        4000 | A |

我希望能够生成一个这样显示的表格

Team  | Home Total  | Home Average | Away Total | Away Average | Total | Average |
  SD  |       4000  |         4000 |          0 |           0  |  4000 |    4000 |
  WP  |          0  |            0 |       4000 |        4000  |  4000 |    4000 |

我尝试过连接和联合,虽然 UNION 给了我最好的结果,虽然结果只在三列中返回

Team, HomeAttendance, AveHomeAttendance

这是我的查询(我还是 MYSQL 的新手)

SELECT Team,
       SUM(Attendance) AS HomeAttendance,
       ROUND(AVG(Attendance),0) AS AveHomeAttendance
FROM MatchDetails
WHERE Season = 2014
  AND HA = 'H'
GROUP BY TEAM
UNION
SELECT Team,
       SUM(Attendance) AS AwayAttendance,
       ROUND(AVG(Attendance),0) AS AveAwayAttendance
FROM MatchDetails
WHERE Season = 2014
  AND HA = 'A'
GROUP BY TEAM
UNION
SELECT Team,
       SUM(Attendance) AS TotalAttendance,
       ROUND(AVG(Attendance),0) AS AveTotalAttendance
FROM MatchDetails
WHERE Season = 2014
GROUP BY TEAM

【问题讨论】:

  • home or away 列中的内容是什么?您在每条记录中都列出了两支球队,那么这个字段是什么意思?
  • 该表的目的是列出每个球队在一个赛季中的总上座率和平均上座率。表格中的主场或客场列填充有“H”表示主场比赛,“A”表示客场比赛。
  • 但是上座率真的只与主队有关吗?我的意思是总是只有一个主队,那么为什么要主队或客队呢?这到底是什么意思?
  • 第一个查询是计算每支球队的主场总上座率和平均主场上座率,第二个查询每支球队的客场总上座率和平均数,第三个查询每支球队的总上座率和平均上座率。
  • 但是你怎么知道在主客场列中提到了哪支球队?根据您感兴趣的团队,该值可能会发生变化。我要说的是,我认为您将自己与错误的架构混淆了。

标签: mysql select union


【解决方案1】:

根据您的更新,您可以使用JOIN 而不是UNION

   SELECT total.HomeTeam AS Team,
          IFNULL(SUM(home.Attendance),0) AS HomeAttendance,
          IFNULL(ROUND(AVG(home.Attendance),0),0) AS AveHomeAttendance,
          IFNULL(SUM(away.Attendance),0) AS AwayAttendance,
          IFNULL(ROUND(AVG(away.Attendance),0),0) AS AveAwayAttendance,
          IFNULL(SUM(total.Attendance),0) AS TotalAttendance,
          IFNULL(ROUND(AVG(total.Attendance),0),0) AS AveTotalAttendance
     FROM MatchDetails total
LEFT JOIN MatchDetails home
       ON home.id = total.id AND home.HA = 'H'
LEFT JOIN MatchDetails away
       ON away.id = total.id AND away.HA = 'A'
    WHERE total.Season = 2014
 GROUP BY total.HomeTeam;

Live DEMO

【讨论】:

  • 出色的 Prix - 非常棒 - 非常感谢 :)
猜你喜欢
  • 2018-06-19
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 2013-10-04
  • 2010-12-25
  • 1970-01-01
相关资源
最近更新 更多