如何在MYSQL中按列两次分组

2024-04-23 23:44:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据库,它的表看起来像是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

编辑2:我将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'))。虽然它对它们进行了正确的排序,但没有一个像我所描述的那样进行分组


Tags: by定义排序groupsurnameselectyear学生
1条回答
网友
1楼 · 发布于 2024-04-23 23:44:57

我认为你只是很难表达一个ORDER BY子句:

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

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

相关问题 更多 >