博客
关于我
mysql之分组查询GROUP BY,HAVING
阅读量:800 次
发布时间:2023-02-11

本文共 1237 字,大约阅读时间需要 4 分钟。

一、查询格式

在编写SQL查询时,需要遵循明确的语法结构。查询列表需要包含以下关键要素:

1. **选择列和函数**:使用`select`语句指定要查询的字段和聚合函数。例如,`select column, group_function(column)`。 2. **指定表名**:明确要操作的数据库表。例如,`from table_name`。 3. **筛选条件**:在`where`子句中添加条件筛选数据。注意:`where`子句后面不能使用`group by`或`having`后的字段别名。 4. **分组操作**:在`group by`子句中指定分组依据字段。例如,`group by field`。 5. **排序子句**:在`order by`子句中定义排序规则。例如,`order by column DESC`。

需要注意的是,查询列表比较特殊,`group by`和`having`后面的字段可以使用原语句前部分定义的别名,而`where`子句后面不能使用别名。

二、分组查询的案例

在实际操作中,需要注意分组查询的逻辑顺序。对于带筛选条件的分组查询,通常分为两种类型:

1. **分组前筛选**:通过原始表数据对记录进行筛选。这种方法可以直接放在`where`子句中。 2. **分组后筛选**:筛选条件依赖于`group by`后的聚合函数结果。这种情况下,筛选条件只能放在`having`子句中。

编写分组查询时,可以按照以下步骤进行:

1. 先写出`select`、`from`、`group by`的基本框架。 2. 观察筛选条件是否可以通过`where`子句完成。如果可以,直接在`where`中添加;如果不行,则需要将其放在`having`子句中。 3. 如果筛选条件涉及聚合函数的结果,则一定要放在`having`子句中。 4. 尽量先使用`where`子句进行筛选,减少`having`子句的使用,以提高查询性能。

**示例:简单的分组查询**

假设有以下数据表`user_info`,字段包括`id`、`username`、`email`、`role`。我们需要计算不同角色的用户数量及其平均邮箱数量。以下是查询步骤:

1. 写出基本框架: ```sql select role, count(id) as user_count, avg(email) as avg_email from user_info group by role having count(id) > 1 order by user_count desc ``` 2. 分析筛选条件:`having count(id) > 1`用于筛选每个角色下用户数量大于1的记录。这里的筛选条件依赖于`group by`后的`count(id)`,因此必须放在`having`子句中。 3. 执行查询,结果会显示不同角色的用户数量及对应的平均邮箱数量,并按用户数量排序。

转载地址:http://ixbfk.baihongyu.com/

你可能感兴趣的文章
Nginx实战经验分享:从小白到专家的成长历程!
查看>>
nginx实现二级域名转发
查看>>
Nginx实现动静分离
查看>>
Nginx实现反向代理负载均衡
查看>>
nginx实现负载均衡
查看>>
Nginx将https重定向为http进行访问的配置(附Demo)
查看>>
nginx工作笔记004---配置https_ssl证书_视频服务器接口等
查看>>
nginx工作笔记005---nginx配置负载均衡_在微服务中实现网关集群_实现TCP传输层协议__http协议的负载均衡
查看>>
nginx常用命令及简单配置
查看>>
Nginx常用屏蔽规则,让网站更安全
查看>>
nginx开机启动脚本
查看>>
nginx异常:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf
查看>>
nginx总结及使用Docker创建nginx教程
查看>>
nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
查看>>
nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in usrlocalnginxconfnginx.conf128
查看>>
nginx日志分割并定期删除
查看>>
Nginx日志分析系统---ElasticStack(ELK)工作笔记001
查看>>
Nginx映射本地json文件,配置解决浏览器跨域问题,提供前端get请求模拟数据
查看>>
Nginx映射本地静态资源时,浏览器提示跨域问题解决
查看>>
nginx最最最详细教程来了
查看>>