如何在mysql中选择两个唯一的字段值
我有一个考试成绩表,其中包含了examid、level和用户得到的分数。正如你在表格中看到的如何在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
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