我还在掌握sql的基础知识。任何帮助非常感谢。
该表是TeamRankings。列如下:
score | qualities_id | team_id | year | source_id
团队在特定年份的不同品质方面得分。请注意,可以为给定团队分配多个分数(每个分数来自不同的来源)。同样,给定的团队在给定年份可能根本没有任何分数。
问题在于:
鉴于单一质量,团队列表和年份列表,我希望为每个团队/年找到一个单独的分数。如果给定的团队/年有多个来源的分数,我想选择具有最低source_id的分数。
我猜这样做的方法是GROUP BY
team_id,year,quality_id,然后以某种方式筛选出更高的源ID。但我对过滤发生的地方感到困惑。它不在HAVING
子句或WHERE
子句中,对吗?我需要子查询吗?
答案 0 :(得分:3)
您可以加入表格的分组版本:
select t.* from TeamRankings t
inner join (select team_id, year, min(source_id) as minSource
from TeamRankings group by team_id, year) f
on t.team_id = f.team_id AND t.year = f.year AND t.source_id = f.minSource
答案 1 :(得分:0)
SELECT score, team_id, year, min(source_id)
FROM TeamRankings
GROUP BY score, team_id, year
WHERE qualities_id=1