我有一张学生成绩表。学生可以多次参加考试,我们只关心最高分。
所以表格看起来像这样:
UserID CatID Score
20 5 60
20 5 85
20 5 80
20 6 90
20 7 80
20 7 75
20 7 90
22 5 75
22 5 85
想要基于UserID变量返回一行,如下所示:
UserID Cat5 Cat6 Cat7
20 85 90 90
以下是我目前使用的查询:
SELECT score AS Score
, catid
FROM `quiz_result`
WHERE userid=65 and catid=5
ORDER BY score DESC
LIMIT 0, 1
不确定如何在一行中获取其他类别。。。想法?
谢谢!
试试这篇文章:
SELECT catID, MAX( score ) FROM `quiz_result`
GROUP BY catID;
输出与您的示例中的输出不完全相同,但它基本上满足了您的需求。
编辑
输出将类似于:
catID MAX(score)
Cat5 85
Cat6 90
Cat7 90
要获取其他列,只需在SELECT查询中包含它们的名称即可。
试试这个:
SELECT CONCAT_WS(',', catID) AS catID, CONCAT_WS(',', MAX(score)) FROM `quiz_result` GROUP BY catID;