繁体   English   中英

如何在MYSQL中按列分组两次

[英]How to group by columns twice in MYSQL

我有一个看起来像一个表的数据库这些领域 我想返回所有学生的名字和姓氏,然后按“瞳孔组”将它们分组,然后按年份分组,并按字母顺序的DESC(pupil_group),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但是它并没有将它们合并成组或按照我的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')) 虽然确实可以正确排序,但它们都没有按照我的描述进行分组。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM