Sql 仅选择一个字段值最高的行,按另一个字段分组
我有一个表,它的信息结构如下:Sql 仅选择一个字段值最高的行,按另一个字段分组,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我有一个表,它的信息结构如下: ID Points Name School 1 123 James A 2 534 Henry B 3 56 Henry B 4 153 Chris B 5 95 Chris B 6 83 Chris B 7 421 James A ID Points Name School 7 421 James A 2
ID Points Name School
1 123 James A
2 534 Henry B
3 56 Henry B
4 153 Chris B
5 95 Chris B
6 83 Chris B
7 421 James A
ID Points Name School
7 421 James A
2 534 Henry B
4 153 Chris B
我需要从查询中找出具有相同名称的行,但每个行的最高点如下所示:
ID Points Name School
1 123 James A
2 534 Henry B
3 56 Henry B
4 153 Chris B
5 95 Chris B
6 83 Chris B
7 421 James A
ID Points Name School
7 421 James A
2 534 Henry B
4 153 Chris B
关于如何通过查询实现这一点,您有什么想法吗?我花了太多时间想弄明白这一点
select name,school,max(points) from table group by name,school
这将为您提供每个姓名/学校组合的最高分数。如果需要ID,请将其连接到自身:
select table.* from table inner join
(select name,school,max(points) as points from table group by name,school) a
on a.name = table.name and a.school = b.school and a.points = table.points
编辑:抱歉,这是一个SQL解决方案…刚刚看到MSACCESS标记。逻辑是正确的,但您需要转换为access语法
编辑以更正第二个查询,在my join中缺少一列
SELECT
(SELECT TOP 1 ID FROM Table
WHERE
Name = t.Name AND
School=t.School AND
Points=t.Points
) as Id, t.Name, t.Points, t.School
FROM
(SELECT Name, School, max(Points) as Points
FROM Table
GROUP BY Name, School) t
这将为您提供每个姓名/学校组合的最高分数。如果需要ID,请将其连接到自身:
select table.* from table inner join
(select name,school,max(points) as points from table group by name,school) a
on a.name = table.name and a.school = b.school and a.points = table.points
编辑:抱歉,这是一个SQL解决方案…刚刚看到MSACCESS标记。逻辑是正确的,但您需要转换为access语法
编辑以更正第二个查询,在my join中缺少一列
SELECT
(SELECT TOP 1 ID FROM Table
WHERE
Name = t.Name AND
School=t.School AND
Points=t.Points
) as Id, t.Name, t.Points, t.School
FROM
(SELECT Name, School, max(Points) as Points
FROM Table
GROUP BY Name, School) t
这将为您提供每个姓名/学校组合的最高分数。如果需要ID,请将其连接到自身:
select table.* from table inner join
(select name,school,max(points) as points from table group by name,school) a
on a.name = table.name and a.school = b.school and a.points = table.points
编辑:抱歉,这是一个SQL解决方案…刚刚看到MSACCESS标记。逻辑是正确的,但您需要转换为access语法
编辑以更正第二个查询,在my join中缺少一列
SELECT
(SELECT TOP 1 ID FROM Table
WHERE
Name = t.Name AND
School=t.School AND
Points=t.Points
) as Id, t.Name, t.Points, t.School
FROM
(SELECT Name, School, max(Points) as Points
FROM Table
GROUP BY Name, School) t
这将为您提供每个姓名/学校组合的最高分数。如果需要ID,请将其连接到自身:
select table.* from table inner join
(select name,school,max(points) as points from table group by name,school) a
on a.name = table.name and a.school = b.school and a.points = table.points
编辑:抱歉,这是一个SQL解决方案…刚刚看到MSACCESS标记。逻辑是正确的,但您需要转换为access语法
编辑以更正第二个查询,如果名称/学校/点在表上是唯一的,则my join中缺少一列将起作用,否则将给出重复项,脚本假定名称/学校/点组合是唯一的,如果不是唯一的,则将返回两条记录(两条记录都满足“max”条件)。如果名称/学校/点在表上唯一,则将起作用,否则将给出重复项,脚本假定名称/学校/点组合是唯一的,如果不是,则将返回两条记录(两条记录都满足“max”条件)。如果名称/学校/点在表上唯一,则将起作用,否则将给出重复项,脚本假定名称/学校/点组合是唯一的,否则将返回两条记录(两条记录都满足“max”条件)。如果名称/学校/点在表上是唯一的,则将工作,否则将给出重复项。脚本假定名称/学校/点组合是唯一的,如果不是,则将返回两条记录(满足“最大”条件的两条记录)。
SELECT
(SELECT TOP 1 ID FROM Table
WHERE
Name = t.Name AND
School=t.School AND
Points=t.Points
) as Id, t.Name, t.Points, t.School
FROM
(SELECT Name, School, max(Points) as Points
FROM Table
GROUP BY Name, School) t