如何在mysql中选择两个唯一的字段值

如何在mysql中选择两个唯一的字段值,mysql,sql,Mysql,Sql,我有一个考试成绩表,其中包含了examid、level和用户得到的分数。正如你在表格中看到的 id examid level points 228 2 1 90 229 3 1 85 230 3 1 65 * 227 1 1 60 * 231 2 2 20 232 1 1

我有一个考试成绩表,其中包含了examid、level和用户得到的分数。正如你在表格中看到的

id     examid   level   points
228    2        1       90     
229    3        1       85     
230    3        1       65  *   
227    1        1       60  *
231    2        2       20 
232    1        1       80
对于每个独特的考试,将选择最高分数。 我想为每个独特的考试和独特的水平选择得分最高的行。行
232
的点大于行
227
,并且
232
将在我的结果集中。另一个是行
229
,它的点大于
230

选择“我的结果集”后,应如下所示:

id     examid   level   points
228    2        1       90     
229    3        1       85     
231    2        2       20 
232    1        1       80
我试着像这样提问

SELECT * FROM results WHERE userid = 20 GROUP BY examid ORDER BY points  
这只会导致

id     examid   level   points
227    1        1       60  
229    3        1       85  
228    2        1       90  

如果不需要id,可以使用一个简单的
分组依据

SELECT examid, level, MAX(points) AS points
FROM tablename
GROUP BY examid, level
如果需要所有字段(包括
id
),可以将表重新加入

SELECT results.*
FROM results
JOIN (
  SELECT examid, level, max(points) AS points
  FROM results
  GROUP BY examid, level ) maxPoints
ON results.examid = maxPoints.examid
  AND results.level = maxPoints.level
  AND results.points = maxPoints.points 

请看

请更具体一点:这两行的确切含义是什么,这意味着它们应该被删除,而其他行应该保留?例如,您是否只想在每个examid/level组合中保留一个最高分数?“我想选择行”不是一个问题。你试过什么?@Shai
“那些分数较低…”
“我想为每个唯一考试和唯一级别选择分数最高的行。”
。看起来很清楚,很具体。这个问题缺少的是:你试过什么?。。。这就是为什么我的第一句话是“如果你不需要id”,考虑到表的结构,这可能是可以接受的。太棒了!但我将使用@PinnyM的答案,它一次包含所有字段。
SELECT examid, level, MAX(`points`)
FROM score
GROUP BY examid, level
ORDER BY id