软件测试|MySQL HAVING分组筛选详解

简介

在 MySQL 数据库中,HAVING 子句用于在使用 GROUP BY 子句对结果进行分组后,对分组后的数据进行筛选和过滤。它允许我们对分组后的结果应用聚合函数,并基于聚合函数的结果进行条件过滤,从而得到我们需要的最终结果集。本文将详细介绍 HAVING子句的用法,并提供一些实际示例以帮助大家更好地理解其功能。

HAVING 子句的语法

HAVING 子句的基本语法如下:

SELECT column1, column2, aggregate_function(column)
FROM table
WHERE condition
GROUP BY column1, column2
HAVING aggregate_function(column) condition;

其中,关键要点包括:

  • column1, column2:指定需要进行分组的列。
  • aggregate_function(column):对分组后的数据应用聚合函数,例如 SUM()COUNT()AVG() 等。
  • condition:对分组后的结果应用过滤条件,类似于 WHERE 子句。

HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING 支持 WHERE 关键字中所有的操作符和语法。

但是 WHERE 和 HAVING 关键字也存在以下几点差异:

  • 一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。
  • WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。
  • WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。
  • WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
  • WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。

使用示例

  1. 使用 HAVING 进行分组筛选

假设我们有一个订单表 orders,其中包含以下列:order_idcustomer_idorder_dateorder_amount。我们希望找出每个客户的订单数量大于等于 3 并且订单总金额大于 1000 的客户。

SELECT customer_id, COUNT(order_id) AS order_count, SUM(order_amount) AS total_amount
FROM orders
GROUP BY customer_id
HAVING order_count >= 3 AND total_amount > 1000;

在这个示例中,我们首先按照 customer_id 进行分组,然后计算每个客户的订单数量和订单总金额。最后,我们使用 HAVING 子句筛选出满足订单数量大于等于 3 并且订单总金额大于 1000 的客户。

  1. 结合 HAVING 和其他子句

假设我们有一个员工表 employees,包含列 employee_iddepartment_idsalary。我们想要找出每个部门的平均工资大于 50000 的部门,并且只显示平均工资大于 50000 的部门信息。

SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING avg_salary > 50000;

在这个示例中,我们首先按照 department_id 进行分组,然后计算每个部门的平均工资。最后,我们使用 HAVING 子句筛选出平均工资大于 50000 的部门。

总结

HAVING 子句在 MySQL 中用于在分组查询的基础上进行筛选和过滤。它允许我们使用聚合函数计算汇总数据,并基于这些汇总数据进行条件过滤。通过合理地结合 GROUP BYHAVING 子句,我们可以轻松地从数据库中获取满足特定条件的分组数据。

希望本文能够帮助读者更好地理解和使用 HAVING 子句,以及如何在分组查询中进行数据过滤和筛选。通过实际的示例,相信读者已经掌握了在 MySQL 中使用 HAVING 子句的方法和技巧。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/309954.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RISC-V Bytes: Caller and Callee Saved Registers

原文链接1:https://danielmangum.com/posts/risc-v-bytes-caller-callee-registers/ 原文链接2:https://zhuanlan.zhihu.com/p/77663680 //主要讲栈帧 原文链接3:https://www.jianshu.com/p/b666213cdd8a //主要讲栈帧 This is part of a new…

2024年中级工程师职称业绩报告该怎么写呢?

1、在写报告时一定要注意时间问题,需要与项目实际时间一致,要把自己的工作经历写清楚,在项目里主要负责什么内容,担任什么职务。 2、可以写发现了什么问题,并如何去解决的,或者因为你发现和创新给项目带来的…

Mermaid 教程

Mermaid 教程 Mermaid 介绍 Mermaid 是一个用于生成流程图、时序图、甘特图等图表的 JavaScript 库。它使用类似于 Markdown 的文本语法,使得创建图表变得简单直观。以下是一个简单的 Mermaid 教程,介绍如何使用 Mermaid 创建流程图、时序图和甘特图。…

docker启动mongo

用户名:root 密码:123456 version: 3.1 services:mongo:image: mongo:7container_name: mongorestart: alwaysports:- 27017:27017volumes:- /opt/data/mongo:/data/dbenvironment:TZ: Asia/ShanghaiMONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROO…

数字孪生+可视化技术 构建智慧新能源汽车充电站监管平台

前言 充电基础设施为电动汽车提供充换电服务,是重要的交通能源融合类基础设施。近年来,随着新能源汽车产业快速发展,我国充电基础设施持续增长,已建成世界上数量最多、服务范围最广、品种类型最全的充电基础设施体系。着眼未来新…

《C++ Primer》第14章 重载运算与类型转换(二)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 14.8 函数调用运算符(P506) 如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类的对象。这样的类同时也能存储状态,所以它们比普通函数更加灵活。…

Android可换行的RadioGroup

Android可换行的RadioGroup,有时候需要换行显示的单选列表,当然可以有多种实现方式,比如recycleview或者listview实现,本文采用的是RadioGrouprediobutton方式实现。 一、首先自定义view public class WrapRadioGroup extends RadioGroup {pr…

【XR806开发板试用】+ FreeRtos开发环境搭建

获取SDK SDK可以通过官网直接下载。 下载完成之后,通过gzip命令解压文件 gzip -d xr806_sdk.tar.gz 获取编译链工具 还是按照官网操作指南,下载 gcc-arm-none-eabi-8-2019-q3-update 下载之后进行解压,同理。 注意修改GCC路径&#xff0c…

三、C语言分支与循环知识点补充——随机数生成

本章分支结构的学习内容如下: 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句(4)分支结构 完 本章循环结构的…

直播预告丨看零售场,如何玩转 MaaS

今年,有一个被频繁提及的词是MaaS 这类工具正在帮助千行百业实现大模型落地产业 在零售场,特别是像京东这样拥有超高并发、超复杂协同的电商场内 也沉淀出了一套通用的AI基础设施——九数算法中台 从提升客户服务体验、平台效率出发,训练各…

AtCoder ABC194

这期比193稍微简单一点 C - Squared Error 手玩一下: N 3 N3 N3时 展开得 a 2 b 2 − 2 a b b 2 − c 2 − 2 b c a 2 c 2 − 2 a c a^2b^2-2abb^2-c^2-2bca^2c^2-2ac a2b2−2abb2−c2−2bca2c2−2ac 每个数平方项都要计算 n − 1 n-1 n−1次 减的那一份可…

MYSQL篇--事务机制高频面试题

事务 1 什么是数据库事务? 事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。…

图纸版本管理混乱怎么办?彩虹PDM系统帮你搞定!

在现代制造业和工程领域,图纸版本管理的混乱常常是一个棘手的问题。不同版本的图纸可能导致严重的错误和生产问题,影响了产品质量和交付时间。然而,有一个强大的工具可以帮助企业解决这个问题,那就是PDM产品数据管理系统。彩虹PDM…

云流量回溯的工作原理及关键功能

云计算和网络技术的快速发展为企业提供了更灵活、高效的业务运营环境,同时也引发了一系列网络安全挑战。在这个背景下,云流量回溯成为网络安全领域的一个关键技术,为企业提供了对网络活动的深入洞察和实时响应的能力。 一、 云流量回溯的基本…

pkuseg按照用户自定义词典分词错误修正

import pkusegc pkuseg.pkuseg(user_dict"./data/dict.txt") sentence 数字传播实验班 print(c.cut(sentence))字典中包含“”数字传媒与人文学院",添加自定义词典后,文本被错误分成““数字传 播 实验班” ,debug发现solve…

OpenShift 4 - 在 OpenShift 上运行物体检测 AI 应用

《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在 OpenShift 4.14 RHODS 2.5.0 的环境中验证 说明:请先根据《OpenShift 4 - 部署 OpenShift AI 环境,运行 AI/ML 应用(视频)》一文完成 OpenShift AI 环境…

python爬虫实战(8)--获取虎pu热榜

1. 需要的类库 import requests from bs4 import BeautifulSoup import pandas as pd2. 请求地址 def fetch_data():url "https://bbs.xxx.com/" # Replace with the actual base URLresponse requests.get(url)if response.status_code 200:return response.c…

2024年最火爆的本地生活服务商平台推荐!

随着互联网的发展,本地生活团购服务市场逐渐成为各大平台争夺的焦点。视频号、DY等短视频平台纷纷入局,希望通过本地生活团购的形式吸引更多的用户,提高平台的活跃度和黏性。对于想要成为本地生活团购服务商的创业者来说,都不想放…

web期末作业网页设计——JavaScript

目录 一.作品简介 二.网页效果 首页 花语 登录界面 注册界面 三.网页代码 首页 登录界面 注册界面 视频界面 一.作品简介 网站系统文件种类包含:html网页结构文件、css网页样式文件、js网页特效文件、images网页图片文件。 网页作品代码简单&#xff…

2024 年 10 款最佳 Android 手机数据恢复软件榜单

当您因某些不合时宜的事故而丢失 Android 设备上的重要数据时,这真是一场灾难。如果您遇到这样的情况,请不要担心。我们列出了一些最好的 Android 数据恢复软件,可以帮助您使用 PC 检索手机丢失的数据。 在用于存储重要数据的各种存储设备中…
最新文章