sql的groupby多条件查询不能按照顺序出现

为什么sql的groupby多条件查询为什么不能按照顺序出现?
这是我的表:

img


我想要让他先按照学校分组之后再按照性别排序,像这样:

img


我的sql语句是这样的:

select * from user_profile 
group by university,id 
ORDER BY FIELD(gender,'male','female');

但是结果却是这样的,完全是乱的,跟我预想的完全不一样,可是我感觉我的想法没有错啊

img

用法不对。group by的作用是通过它后面的字段将数据集划分成若干个子集,然后对子集进行数据处理,如汇总求和,需要在select中使用聚合函数。
你直接order by university, gender看看是否你需要的结果

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/852180
  • 你也可以参考下这篇文章:sql语句group by找到最大值及对应的一条数据
  • 以下回答来自chatgpt:

    对于这个问题,你想要按照学校进行分组,并按照性别进行排序,但是结果却是乱序的。这是因为在SQL的GROUP BY子句中,并不保证分组后的结果按照指定的顺序出现。这可能是因为GROUP BY的实现方式导致的。

    为了解决这个问题,你可以采用子查询的方式来实现。首先,在子查询中按照学校进行分组,并按照学校和性别进行排序。然后,在外部查询中再次按照学校进行分组,这样就可以得到按照学校分组后按照性别排序的结果。

    以下是修改后的SQL语句示例:

    SELECT 学校, 性别
    FROM (
      SELECT *
      FROM [表名]
      ORDER BY 学校, 性别
    ) AS subquery
    GROUP BY 学校
    

    这样,你就可以得到按照学校分组后按照性别排序的结果了。

    希望这个解决方案能够帮助到你!如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

首先,你为什么要用字符串保存性别呢,一般用0和1表示性别。
其次是你这个是什么数据库,field函数都没见过,如果是mysql,可以这样

select * from user_profile 
group by university
ORDER BY if(gender='male', 0, 1);