请查询每个选手的进球情况(射手榜)。 注意:要求使用关联查询的方式、进球数为零的选手不显示。 显示项目:名次(进球数相同时名次相同)、选手名、国名、所属俱乐部、进球数 显示顺序:进球数的降序的sql文不适用窗口函数
时间: 2024-05-22 20:16:47 浏览: 12
SELECT
ROW_NUMBER() OVER (ORDER BY goals DESC) AS '名次',
players.name AS '选手名',
teams.country AS '国名',
teams.name AS '所属俱乐部',
goals AS '进球数'
FROM
players
JOIN
teams
ON players.team_id = teams.id
WHERE
goals > 0
ORDER BY
goals DESC;
相关问题
要求使用关联查询的方式、进球数为零的选手不显示。 显示项目:名次(进球数相同时名次相同)、选手名、国名、所属俱乐部、进球数 显示顺序:进球数的降序sql文
SELECT
@rank := IFNULL(@rank, 0) + 1 AS '名次',
p.player_name AS '选手名',
c.country_name AS '国名',
t.team_name AS '所属俱乐部',
COUNT(g.goal_id) AS '进球数'
FROM
players p
INNER JOIN countries c ON p.country_id = c.country_id
INNER JOIN teams t ON p.team_id = t.team_id
LEFT JOIN goals g ON p.player_id = g.player_id
WHERE
g.player_id IS NOT NULL
GROUP BY
p.player_id
HAVING
COUNT(g.goal_id) > 0
ORDER BY
COUNT(g.goal_id) DESC;
请查询 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 排名进行排序。