我有一个数据库,该数据库的表看起来像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
。
EDIT2:我将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'))
。虽然可以正确排序,但没有一个按照我的描述进行分组。
答案 0 :(得分:0)
我认为您很难阐明ORDER BY
子句:
SELECT First_Name, Surname, Pupil_Group, Year
FROM pupils
ORDER BY pupil_group DESC, year, Surname DESC;
这会将所有记录放在同一学生组中。然后,在每个这样的组中,记录将按年份升序排列,然后按姓氏降序排列。