我有一个数据库,它的表看起来像是this和these fields。我想返回所有学生的名字和姓氏,然后按学生组分组,然后按年份分组,然后按字母顺序依次为DESC(学生组)、ASC(年份)和DESC(姓氏)
例如,在上面的表上运行SELECT * FROM pupils;
将返回以下结果:
(((('Jonathan', 'Morris'))), ((('Amber', 'Wilfred))), ((('Grace' ,'Harlow'))), ((('Elizabeth', 'Van Stephen'))), ((('Craig', 'Filip'))), ((('Alice', 'Howard'))), ((('Christopher', 'Paulsen'))), ((('William', 'Chong')), (('Matthew', 'Chong'))), ((('Jessica', 'Harris'))))
所以它是这样的:外括号定义了集体学生,内括号定义了学生组,内括号定义了年份,内括号定义了单个学生
对不起,如果这不是很清楚,如果我犯了一个错误。如果有什么我可以澄清,使这更容易理解,然后让我知道,我会这样做
目前我已经尝试了SELECT first_name, surname from pupils GROUP BY pupil_group, year ORDER BY pupil_group, year ASC
,但它没有将它们合并到组中,也没有按照我的意愿对它们进行排序
谢谢
编辑:我刚刚意识到我的year
列是一个varchar(2)
列,因此它可能无法排序,因为它包含数字。我想我会把它变成一个int
编辑2:我将year
更新为int
。我现在尝试了下面建议的SELECT first_name, surname, year, pupil_group FROM pupils ORDER BY pupil_group ASC, year ASC, surname ASC
(添加了year
和pupil_group
以使其更易于解释),但这返回了(('Jonathan', 'Morris', 9, 'Apollo'), ('Amber', 'Wilfred', 9, 'Artemis'), ('Grace', 'Harlow', 9, 'Athena'), ('Elizabeth', 'Van Stephen', 9, 'Demeter'), ('Jessica', 'Harris', 10, 'Demeter'), ('Craig', 'Filip', 9, 'Hades'), ('Alice', 'Howard', 9, 'Hera'), ('Christopher', 'Paulsen', 9, 'Hermes'), ('William', 'Chong', 9, 'Poseidon'), ('Matthew', 'Chong', 10, 'Poseidon'))
。虽然它对它们进行了正确的排序,但没有一个像我所描述的那样进行分组
我认为你只是很难表达一个
ORDER BY
子句:这将把同一学生组中的所有记录放在一起。然后,在每个这样的组中,记录将按年份升序排列,然后按姓氏降序排列
相关问题 更多 >
编程相关推荐