【发布时间】:2009-09-30 06:04:45
【问题描述】:
假设我正在分析高中体育记录如何影响上学率。
所以我有一张表格,其中每一行对应于一场高中篮球比赛。每场比赛都有一个客队 id 和一个主队 id(FK 到另一个“球队表”)以及一个主场比分和一个客场比分和一个日期。我正在编写一个查询,将出勤率与本赛季的篮球比赛相匹配。
我的示例输出将是(#_students_missed_class、day_of_game、home_team、away_team、home_team_wins_this_season、away_team_wins_this_season)
我现在想将每支球队上赛季的表现添加到我的分析中。好吧,我将他们上一个赛季存储在游戏表中,但我应该能够通过子选择来完成。
所以在我的主选择语句中,我添加了子选择:
SELECT COUNT(*) FROM game_table
WHERE game_table.date
BETWEEN 'start of previous season' AND 'end of previous season'
AND (
(game_table.home_team = team_table.id
AND game_table.home_score > game_table.away_score)
OR (game_table.away_team = team_table.id
AND game_table.away_score > game_table.home_score))
在这种情况下,team-table.id 指的是 home_team 的 id,所以我现在计算了他们上一年的所有胜利。
这种计算方法既不占用时间也不占用资源。 Explain SQL 显示我在 Type 字段中有 ALL 并且我没有使用 Key 并且查询超时。我不确定如何使用子选择完成更有效的查询。必须编写其中的 4 个查询(对于主胜、主场负、客胜、客场负)似乎效率极低。
我相信这可能会更清晰。如果有人有问题,我明天绝对会添加颜色
【问题讨论】:
-
谢谢,我从来不知道这是正确的礼仪。我回去做了/将来也会这样做
标签: sql mysql optimization