首页 > 数据库 >【mysql】 查询数据时group by,及group_concat()函数用法

【mysql】 查询数据时group by,及group_concat()函数用法

时间:2023-02-01 10:33:55浏览次数:40  
标签:GROUP 查询 分组 concat mysql group id select

GROUP BY 语句

语法

        select 
            聚合函数,
            列(要求出现在group by的后面)
        from 
            表
        where 
            筛选条件
        group by 
            分组的列表
        order by 
            子句

注意:除了出现在group by后面的字段,如果要在select后查询其他字段,必须用聚合函数进行聚合

特点:分组查询中的筛选条件分为两类:
分组前筛选: 数据源是原始表,用where,放在group by前面,因为在分组前筛选
分组后筛选:数据源是分组后的结果集 ,用having,放在group by后面,因为在分组后进行筛选。

例子

# 查询每个工种最高工资员工
select 
    max(salary),
    job_id
from 
    employees
group by 
    job_id;



# 查询邮箱中包含a字符的每个部门的平均工资
select 
    avg(salary),
    department_id
from 
    employees
where 
    email like '%a%'
group by 
    department_id



# 查询有奖金的每个领导手下最高工资的员工工资
select 
    max(salary),
    manager_id 
from 
    employees
where 
    commission_pct is not null
group by 
    manager_id



# 查询哪个部门的员工个数大于2
select  
    count(*),
    department_id 
from 
    employees 
group by 
    department_id 
having 
    count(*) > 2;



# 查询每个工种有奖金的员工的最高工资大于12000的工种编号和最高工资
select 
    max(salary),
    job_id
from 
    employees
where 
    commission_pct is not null
group by 
    job_id 
having 
    max(salary) > 12000;

 

按表达式或聚合函数进行筛选

# 按照员工姓名长度分组,查询每一组员工个数,筛选员工个数大于5的有哪些
select 
    count(*)  ,
    length(last_name) as len_name
from 
    employees 
group by 
    length(last_name)
having 
    count(*) > 5;

 

按照多个字段分组

# 查询每个部门每个工种的员工平均工资,并且按照平均工资的高低排序
select 
    avg(salary),
    department_id,
    job_id 
from 
    employees
where 
    department_id is not null
group by 
    department_id,
    job_id
order by 
    avg(salary) desc;

 

group_concat()函数

group_concat()函数语法如下:

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

示例:SELECT * FROM testgroup

表结构与数据如上

现在的需求就是每个id为一行 在前台每行显示该id所有分数

  • SELECT id,GROUP_CONCAT(score) FROM testgroup GROUP BY id

可以看到 根据id 分成了三行 并且分数默认用 逗号 分割 但是有每个id有重复数据

 

接下来去重:

  •  SELECT id,GROUP_CONCAT(DISTINCT score) FROM testgroup GROUP BY id

 

 

排序:

  • SELECT id,GROUP_CONCAT(DISTINCT score ORDER BY score DESC) as result FROM testgroup GROUP BY id

 

最后可以设置分隔符:

  • SELECT id,GROUP_CONCAT(DISTINCT score ORDER BY score DESC SEPARATOR '-') as result FROM testgroup GROUP BY id

 

reference

https://www.cnblogs.com/tff612/p/15513606.html

https://blog.csdn.net/weixin_41885239/article/details/115933896

标签:GROUP,查询,分组,concat,mysql,group,id,select
From: https://www.cnblogs.com/jyf2018/p/17081742.html

相关文章

  • mysql-内置函数
    函数一、单行函数1.数学相关函数1.1数值函数1.2角度弧度互换1.3三角函数:其中的参数是弧度,所以应先将角度换算成弧度在使用该函数1.4指数与对数1.5进制转换......
  • 从零写一个兼容MySQL/Oracle的Proxy中件间(一)《初识Oracle的通信协议》
    0.前言MySQL由于开源的原因,有各式各样的中件间Proxy,极大的丰富了做高可用或迁移的方案,习惯了MySQL生态圈的灵活和便利,Oracle官方不开源代码和协议,没有中间件proxy,显得很......
  • .net升级7.0报错1. MySqlConnection is already in use. See https://fl.vu/mysql-con
    框架升级到7.0后,经常出现服务崩溃的问题,频繁到几乎五分钟一次...然后开始盯日志,得到以下下几种异常:MySqlConnectionisalreadyinuse.Seehttps://fl.......
  • 1-安装MySQL数据库
    解压文件,移动到/usr/local/mysql3308目录下tar-zxvfmysql-5.7.35-linux-glibc2.12-x86_64.tar.gzmvmysql-5.7.35-linux-glibc2.12-x86_64/usr/local/mysql3308......
  • k8s最佳实践:cgroup kmem的内存泄露问题
    k8s最佳实践:cgroupkmem的内存泄露问题1.前言这篇文章的全称应该叫:[在某些内核版本上,cgroup的kmemaccount特性有内存泄露问题],如果你遇到过pod的"cannotallocated......
  • [转]B树与B+树----mysql的索引结构
    B树和B+树是MySQL索引使用的数据结构,对于索引优化和原理理解都非常重要,下面我的写文章就是要把B树,B+树的神秘面纱揭开,让大家在面试的时候碰到这个知识点一往无前,不再成为......
  • mysql数据类型
    整形 定点数注意ALTERTABLEdemonoMODIFYsalayDECIMAL(15,3)--12位整数,3位小数小数超出的部分四舍五入,正数超出的部分报错时间类型 ......
  • MySQL之MVCC总结理解
    前置知识涉及到的几个概念:隐藏字段,undolog,readview(每个表中的)隐藏字段:最后修改记录的事务id,回滚指针undolog:在插入/更新数据的时候记录回滚日志当前读:读取的是记......
  • MySQL执行计划
    一、什么是MySQL执行计划在平时的开发工作中,少不了数据库的使用,那么就会涉及到sql语句,如何知道sql语句执行的过程,以及sql语句执行的性能,通过执行计划模拟优化器执行sql进......
  • mysql学习问题记录
    Q:MySQL在创建外键索引时,使用工具会出现创建完成但是闪一下就没了使用CONSTRAINT'外键索引名'FOREIGNKEY('xx')REFERENCES数据库名(xx)创建时,只会出现索引信......