我在Sqlite中的表有:
ID studentID Name Lesson TryNo Degree 1 1 John a1 1 23 2 1 John a1 2 66 3 1 John b1 1 55 4 1 John b1 2 null 5 1 John c1 1 45 6 1 John c1 2 50 7 2 Sara a1 1 88 8 2 Sara a1 2 null 9 2 Sara b1 1 45 10 2 Sara b1 2 32 11 2 Sara c1 1 null 12 2 Sara c1 2 55
像约翰和萨拉这样的学生有三节课,如果他们在第一次尝试中失败,他们会再次尝试同一课。 我的问题是,我喜欢创建包含每节课最佳学位而不是两度的新视图,因此新视图应显示以下值:
ID studentID Name Lesson TryNo Degree 2 1 John a1 2 66 3 1 John b1 1 55 6 1 John c1 2 50 7 2 Sara a1 1 88 9 2 Sara b1 1 45 12 2 Sara c1 2 55
我尝试做2天没有结果,请帮忙吗?
答案 0 :(得分:0)
使用SQLite 3.7.11或更高版本,只需组合GROUP BY和MAX:
SELECT ID, studentID, Name, Lesson, TryNo, MAX(Degree) AS Degree
FROM MyTable
GROUP BY studentID, Name, Lesson
在早期的SQLite版本中,列ID
和TryNo
无法保证从与MAX
相匹配的相同记录中获取其值(并且大多数其他数据库都会出错)。
在这种情况下,您必须查找每个唯一学生/课程组合的最大学位,并使用它来过滤掉其他记录:
SELECT *
FROM MyTable
WHERE ID = (SELECT ID
FROM MyTable AS T2
WHERE T2.studentID = MyTable.studentID
AND T2.Lesson = MyTable.Lesson
ORDER BY Degree DESC
LIMIT 1)