mysql分组后其他字段按照分组规则拼接字符串 -- group by与 group_concat()(好文章!!)

141 篇文章 6 订阅
87 篇文章 6 订阅

建表语句:

create table st(
    id int,
    name varchar(50),
    cla varchar(50),
    num int
);

插入数据:

insert into st values(1,'张三','高数',3);
insert into st values(1,'张三','大学物理',2);
insert into st values(1,'张三','计量经济学',3);
insert into st values(2,'李四四','高数',2);
insert into st values(2,'李四四','计量经济学',4);
insert into st values(3,'王五','高数',3);
insert into st values(3,'王五','大学物理',3);

原表数据:
这里写图片描述

查询出学习次数的总和

查询结果如图:
这里写图片描述

sql语句如下:

select id,name,sum(num) count from st group by id,name;

或者

select id,max(name) name,sum(num) count from st group by id;

还有个恶心的:

    select   s1.id id,s1.name name,s2.count1 from st s1 
        join (select id,sum(num) count1 from st group by id ) s2
            on s1.id=s2.id 
    where s1.id in (select id  from st group by id) 
        group by id,name;

查询出学生学习次数的总和以及学习课程

查询结果如图:
这里写图片描述

需要用到group_concat() :
1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )

sql如下:

SELECT id, name,group_concat(cla separator '-') cla,sum(num) num
    FROM st GROUP BY id,name;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值