sql在国家表,对战表,进球表里查询请查询 D 组各场比赛的进球数。进球数为 0 时也要显示。 显示项目:开球时间、本国名、对战国名、本国的进球数、对战国的进球数、进球数差 显示顺序:开球时间的升序、本国的 FIFA 排名的升序
时间: 2024-05-20 09:17:42 浏览: 5
SELECT m.kickoff_time, t1.country_name AS home_country, t2.country_name AS away_country,
COALESCE(hg.home_goals, 0) AS home_goals, COALESCE(ag.away_goals, 0) AS away_goals,
COALESCE(hg.home_goals, 0) - COALESCE(ag.away_goals, 0) AS goal_diff
FROM matches m
JOIN countries t1 ON m.home_team = t1.country_id
JOIN countries t2 ON m.away_team = t2.country_id
LEFT JOIN (SELECT match_id, home_goals FROM goals) hg ON m.match_id = hg.match_id AND m.home_team = hg.country_id
LEFT JOIN (SELECT match_id, away_goals FROM goals) ag ON m.match_id = ag.match_id AND m.away_team = ag.country_id
WHERE m.group_id = 'D'
ORDER BY m.kickoff_time ASC, t1.fifa_ranking ASC;
相关问题
sql在国家表,对战表,进球表里查询请查询 D 组各场比赛的进球数。进球数为 0 时也要显示。 显示项目:开球时间、本国名、对战国名、本国的进球数、对战国的进球数、进球数差 显示顺序:开球时间的升序、本国的 FIFA 排名的升序并按句解释
SELECT
game_date AS '开球时间',
home_team.country_name AS '本国名',
away_team.country_name AS '对战国名',
IFNULL(home_goals,0) AS '本国的进球数',
IFNULL(away_goals,0) AS '对战国的进球数',
IFNULL(home_goals,0) - IFNULL(away_goals,0) AS '进球数差'
FROM
matches
JOIN countries AS home_team ON matches.home_team_id = home_team.id
JOIN countries AS away_team ON matches.away_team_id = away_team.id
WHERE
home_team.group_id = 'D' AND away_team.group_id = 'D'
ORDER BY
game_date ASC,
home_team.fifa_ranking ASC;
在该SQL语句中:
- 我们从比赛表中获取比赛日期和主队、客队的ID。
- 然后通过JOIN语句将国家表中的主队和客队信息连接到比赛表中。
- 我们筛选出D组的比赛,并将主队和客队的进球数与进球数差计算出来。
- 最后按比赛日期和主队FIFA排名升序排序。
请查询 D 组各场比赛的进球数。进球数为 0 时也要显示。 显示项目:开球时间、本国名、对战国名、本国的进球数、对战国的进球数、进球数差 显示顺序:开球时间的升序、本国的 FIFA 排名的升序sql思路
根据题目要求,需要查询 D 组各场比赛的进球数。因此,需要使用联结查询,将比赛数据和进球数据进行联结,然后再根据比赛时间和国家 FIFA 排名进行排序。
具体的 SQL 代码如下:
```
SELECT m.kickoff_time, m.home_team, m.away_team,
IFNULL(SUM(CASE WHEN g.team = m.home_team THEN 1 ELSE 0 END), 0) AS home_goals,
IFNULL(SUM(CASE WHEN g.team = m.away_team THEN 1 ELSE 0 END), 0) AS away_goals,
IFNULL(SUM(CASE WHEN g.team = m.home_team THEN 1 ELSE -1 END), 0) AS goal_diff
FROM matches m
LEFT JOIN goals g ON m.match_id = g.match_id
WHERE m.group_name = 'D'
GROUP BY m.match_id
ORDER BY m.kickoff_time ASC, m.home_rank ASC;
```
解释:
- 使用 LEFT JOIN 进行联结查询,将比赛数据和进球数据进行联结。
- 使用 IFNULL 函数,对进球数为 0 的情况进行处理。
- 使用 SUM 和 CASE WHEN 函数,对每个国家的进球数进行统计。
- 使用 GROUP BY 对比赛进行分组,以便对每场比赛进行统计。
- 使用 ORDER BY 对比赛时间和国家 FIFA 排名进行排序。