mysql之group by和having用法详解

MySQL之GROUP BY和HAVING用法详解

在MySQL中,GROUP BYHAVING是用于对数据进行分组和过滤的两个非常重要的语句。

一、GROUP BY语句

GROUP BY语句用于对查询结果集进行分组。它可以将相同的数据分为一组,并对每一组进行计算。

语法:

SELECT column_name1, COUNT(column_name2)
FROM table_name
GROUP BY column_name1

解释:

  • SELECT语句中,第一个参数column_name1表示需要分组的字段。
  • 第二个参数COUNT(column_name2)表示求column_name2字段的计算结果,比如计算该字段的个数、求和等。
  • FROM语句中,table_name表示需要查询的数据表。
  • GROUP BY语句中,column_name1表示需要分组的字段。

例如,我们有一个orders表,其中存储了顾客的订单信息:

id customer_id order_date amount
1 1 2020-01-01 100
2 1 2020-01-02 200
3 2 2020-01-03 150
4 2 2020-01-04 300

现在我们想要统计每个顾客的订单总金额,可以使用以下的GROUP BY语句:

SELECT customer_id, SUM(amount) as total_amount
FROM orders
GROUP BY customer_id

执行结果为:

customer_id total_amount
1 300
2 450

二、HAVING语句

HAVING语句用于在GROUP BY语句的基础上对结果集进行过滤。它可以筛选出满足指定条件的分组数据。

语法:

SELECT column_name1, COUNT(column_name2)
FROM table_name
GROUP BY column_name1
HAVING condition

解释:

  • SELECT语句、FROM语句、GROUP BY语句的含义同上。
  • HAVING语句中,condition表示需要满足的条件。

例如,我们有一个students表,其中存储了学生的成绩信息:

id name subject score
1 Alice Math 80
2 Alice English 90
3 Bob Math 70
4 Bob English 85

现在我们想要筛选出每个学生的平均成绩大于80的记录,可以使用以下的语句:

SELECT name, AVG(score) as avg_score
FROM students
GROUP BY name
HAVING avg_score > 80

执行结果为:

name avg_score
Alice 85
Bob 77.5

三、总结

GROUP BYHAVING是用于数据分组和过滤的两个重要语句,它们能够帮助我们对数据进行更精细的分析和处理。

在使用GROUP BY语句时,需要注意的是字段中的空值会分为一组;而使用HAVING语句时,需要先使用GROUP BY语句进行分组,再在分组的基础上进行条件筛选。

希望本篇攻略能对您的学习有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql之group by和having用法详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Mysql中limit的用法方法详解与注意事项

    当我们需要从MySQL数据库中检索大量数据时,为了优化性能和减少查询时间,我们可以使用limit关键字来限制结果集的大小。本攻略将详细讲解limit的用法方法以及需要注意的事项。 1. LIMIT的基本用法 1.1. LIMIT语句的语法 LIMIT语句的基本语法格式如下: SELECT column1, column2… FROM table_name…

    MySQL 2023年5月19日
    00
  • mysql数据库存储过程数据迁移案例与比较

    cursor 与 insert …select 对比:     cursor:安全,不会造成死锁,可以在服务运行阶段跑,比较稳定。   insert…select :速度快,但是可能造成死锁,相比cursor能够成倍提升,在服务停止的情况下迁移,速度快 数据迁移案例:   首先数据的迁移绝对不是一朝一夕能够快速迁移完成的 ,如果可以很快完成的 dum…

    MySQL 2023年4月16日
    00
  • 配置ogg异构oracle-mysql(1)基础环境配置

    一、环境描述: 192.168.0.164 ( Oracle ) —> 192.168.0.165 (Mysql ) 版本: 操作系统:redhat5.8 Oracle:  11.2.0.3 Mysql:     5.5.37 goldgate: 11.2.0.1.3 for oracle 11.2.0.1.1 for mysql 测试用户: 在ora…

    MySQL 2023年4月12日
    00
  • html css javascript mysql php一些简单随笔

    1.格式 <!doctype html> 声明文档类型,说明html版本号 <html> 说明代码格式 <head>  网页的头部 <meta charset=”utf-8″> 定义网页字符集,关键词等内容:例如:<meta name=”keywords” content=”html”> <t…

    MySQL 2023年4月12日
    00
  • MySql随笔记基础

    XAMPP使用 shell 命令   每个数据库对应 一个子文件夹   mysql 进入mySQL的命令 -uroot userroot 登录用户 -uroot -p password 登录密码 -p123 show databases 显示数据库 use databaseName 使用哪个数据库 show tables 显示数据表   alter –更改…

    MySQL 2023年4月18日
    00
  • MySQL四种日志binlog/redolog/relaylog/undolog

    优质博文:IT-BLOG-CN 一、binlog binlog记录数据库表结构和表数据变更,比如update/delete/insert/truncate/create,它不会记录select。存储着每条变更的SQL语句和XID事务Id等等。binlog日志文件如下: [root@192.168.10.11]# mysqlbinlog mysql-binlo…

    MySQL 2023年4月17日
    00
  • 几个缩减MySQL以节省磁盘空间的建议

    当数据量庞大时,MySQL所占用的磁盘空间也随之增加。因此,几个缩减MySQL以节省磁盘空间的建议就尤为重要。 以下是一些缩减MySQL以节省磁盘空间的建议: 1. 使用TINYINT代替BOOLEAN 在MySQL中,BOOLEAN会以1字节的形式存储。然而,TINYINT可以用1位就能存储,所以使用TINYINT可以大大节省磁盘空间。 例如,当一个表中有…

    MySQL 2023年5月19日
    00
  • MySQL中join语句怎么优化

    MySQL中join语句优化是提高查询性能的重要手段之一,下面是优化join语句的完整攻略: 1. 通过选择合适的join类型来优化 MySQL中的join操作有多种类型(包括inner join、left join、right join、full join等),不同的join类型会产生不同的结果。在选择时,需要根据表之间的关系和查询需求来选择合适的join…

    MySQL 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部