mysql中group by和order by同时使用无效 group_concat

本文介绍了如何在MySQL中使用GROUP_CONCAT结合GROUP BY和ORDER BY来查询每个班级的学生数量,并按年龄排序。示例中展示了查询过程,包括创建表、查询语句及结果展示。在处理数据时,GROUP_CONCAT生成的字符串需要进一步处理,例如在JavaScript中进行split操作。这个需求在实际项目中有应用,因此进行了详细记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                    每天学习一点点,进步一点点,努力给自己、给我爱的人一个更好的未来!

                                                                                                                                                                          ----   zc

一个需求,查询每个班级中学生数量,并且判断该班级年龄有没有20的

主要用到GROUP_CONCAT关键字,下面例子

一张表:

sql:

create table `student` (
	`id` int (11),
	`sname` varchar (96),
	`saddress` varchar (192),
	`age` int (11),
	`stu_class` varchar (96)
); 
insert into `student` (`id`, `sname`, `saddress`, `age`, `stu_class`) values('1','张三','北京','18','一班');
insert into `student` (`id`, `sname`, `saddress`, `age`, `stu_class`) values('2','里斯','天津','23','一班');
insert into `student` (`id`, `sname`, `saddress`, `age`, `stu_class`) values('3','王五','天津','33','一班');
insert into `student` (`id`, `sname`, `saddress`, `age`, `stu_class`) values('4','赵六','北京','20','三班');
insert into `student` (`id`, `sname`, `saddress`, `age`, `stu_class`) values('5','天气','北京','20','三班');
insert into `student` (`id`, `sname`, `saddress`, `age`, `stu_class`) values('6','王八','河北','19','二班');
insert into `student` (`id`, `sname`, `saddress`, `age`, `stu_class`) values('7','李四','上海','23','三班');
insert into `student` (`id`, `sname`, `saddress`, `age`, `stu_class`) values('8','天齐','河南','23','一班');
insert into `student` (`id`, `sname`, `saddress`, `age`, `stu_class`) values('9','风格','河北','19','二班');

sql:


SELECT COUNT(1) countNum, sname,saddress,stu_class,
       GROUP_CONCAT(age ORDER BY age) ageArr
FROM student 
GROUP BY stu_class

结果:

 其年龄就是排序的

GROUP_CONCAT会得到这样一个字符串“18,23,23,33”,需要分割 split

如果在js中

//假设data是调用接口返回的数据
data.forEach(function(value,index,array){
    var arr = value.ageArr.split(",");
    //如果年龄中有20,则返回其下标,-1为没有
    if (arr.indexOf("20") == -1) {
        //TODO
    }
 });

总体有点乱,但不难理解,因为项目中需要该思想,需要判断,找了些资料,所以记录一下

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值