【问题标题】:MySQL: Creating query that sums column while gathering info from other tablesMySQL:创建求和列的查询,同时从其他表中收集信息
【发布时间】:2021-02-28 04:43:44
【问题描述】:

列出骑手的名字,RaceLevel 为 Race_Level 和基于其位置的所有点的总数。确保你不 列出尚未参加任何比赛(尚未上名)的所有车手。将数据从高到高排序 总分最低

这是我迄今为止尝试过的。

SELECT RIDERS.FIRST_NAME, RIDERS.LAST_NAME, RACES.RACE_LEVEL, PARTICIPATION.PLACEMENT
FROM RIDERS, RACES, PARTICIPATION
WHERE RIDERS.RIDER_ID = PARTICIPATION.RIDER_ID AND RACES.RACE_LEVEL = 'EASY' AND PARTICIPATION.PLACEMENT > 0;

我已尝试添加SUM(PARTICIPATION.PLACEMENT),但它会删除所有结果并留下一行。我需要弄清楚如何计算每个人的位置。

【问题讨论】:

  • 你需要学习GROUP BY子句。

标签: sql sum inner-join aggregate-functions


【解决方案1】:

我尝试添加 SUM(PARTICIPATION.PLACEMENT),但它删除了所有结果,只剩下一行。

您需要一个group by 子句来使其成为有效的聚合查询:

select ri.first_name, ri.last_name, ra.race_level, sum(pa.placement)
from riders ri
inner join participation pa on ri.rider_id = pa.rider_id
inner join races ra on ??
where ra.race_level = 'easy' and pa.placement > 0
group by ri.rider_id, ri.first_name, ri.last_name, ra.race_level

重要提示:

  • 使用标准连接!隐式连接(from 子句中带有逗号)是遗留语法,不应在新代码中使用。我修改了您的代码,现在很明显您缺少race 表上的连接条件;你没有提供足够的信息让我做出有根据的猜测,所以我在查询中表示为??

  • 表别名使查询更易于编写和阅读

  • group by 子句中添加riders 表的主键可确保查询不会错误地将同名的不同骑手组合在一起

【讨论】:

    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多