如何在MYSQL中按列分组两次

时间:2019-03-03 14:37:24

标签: python mysql

我有一个数据库,该数据库的表看起来像thisthese 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(添加了yearpupil_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'))。虽然可以正确排序,但没有一个按照我的描述进行分组。

1 个答案:

答案 0 :(得分:0)

我认为您很难阐明ORDER BY子句:

SELECT First_Name, Surname, Pupil_Group, Year
FROM pupils
ORDER BY pupil_group DESC, year, Surname DESC;

这会将所有记录放在同一学生组中。然后,在每个这样的组中,记录将按年份升序排列,然后按姓氏降序排列。