当前位置: 首页 > news >正文

MySQL常见的聚合函数:

目录

基本语法:

常见的五大聚合函数:

AVG/SUM:

MAX/MIN:

COUNT:

如果要进行计算表中有多少条记录,应该怎么使用COUNT来进行计算?

方式1:

方式2:

方式3:

那么对于上述三种方式的效率,谁更好?

三者的效率:

举例:


聚合函数将一列数据作为整体,进行数学运算或者统计分析,返回汇总结果。也就是聚合函数作用于一组数据,并对一组数据返回一个值。

基本语法:

SELECT 聚合函数(列名) 
FROM 表名;

常见的五大聚合函数:

AVG/SUM:

AVG:求平均数
SELECT AVG(字段名)
FROM 表名;
AVG=SUM/COUNTSUM:求和
SELECT SUM(字段名)
FROM 表名;

只适用于数值类型的字段或者变量,不会计算NULL。

MAX/MIN:

MAX:求取最大值
SELECT MAX(字段名)
FROM 表名;MIN:求取最小值
SELECT MIN(字段名)
FROM 表名;

适用于数值类型、字符串类型、日期时间类型的字段或者变量,不会计算NULL。

COUNT:

查询指定字段在表中的次数
和该字段的数值没有关系,统计该字段的个数
SELECT COUNT(字段名)
FROM 表名;
注意:COUNT(字段名)只是返回该字段不为空的行数

如果要进行计算表中有多少条记录,应该怎么使用COUNT来进行计算?

方式1:
SELECT COUNT(字段名)
FROM 表名;
方式2:
SELECT COUNT(常数)
FROM 表名;
方式3:
SELECT COUNT(*)
FROM 表名;

在上述方式中,方式1统计表的记录,不一定正确,因为COUNT不会计算NULL,如果查询字段的值有NULL值,那么计算的结果就会变少。

那么对于上述三种方式的效率,谁更好?

对于MyISAM存储引擎的表是没有区别的。因为内部有一计数器在维护行数。统计表的行数的时间复杂度只需要O(1)。

对于InnoDB存储引擎的表用COUNT(*),COUNT(1)直接读取行数,复杂度为O(n),因为InnoDB要去数一遍,但是好于具体的COUNT(字段名)。

三者的效率:

一般情况下:COUNT(*)=COUNT(1)>COUNT(字段名)。

能不能用COUNT(字段名)替换COUNT(*)?

不要替换,因为COUNT(*)是SQL92定义的标准统计行数的语法,与数据库无关,与NULL和非NULL无关。

举例:

牛客网SQL题目:

查找GPA最高值_牛客题霸_牛客网

题目:运营想要知道复旦大学学生gpa最高值是多少,请你取出相应数据

示例:某user_profile表如下:

iddevice_idgenderageuniversitygpa
12234male21北京大学3.2
22235maleNULL复旦大学3.8
32236female20复旦大学3.5
42237female23浙江大学3.3
52238male25复旦大学3.1
62239male25北京大学3.6
72240maleNULL清华大学3.3
82241femaleNULL北京大学3.7

 我们可以使用之前所说的ORDER BY进行一个降序排序,那么第一个数据就是最大的。因为只要复旦大学学生的gpa,所以加上过滤条件。

# SELECT gpa
# FROM user_profile
# WHERE university = '复旦大学'
# ORDER BY gpa DESC
# LIMIT 0,1;

那么使用MAX函数,我们则可以是直接对gpa字段进行一个计算。得到最大值,然后进行过滤就行。

SELECT MAX(gpa) gpa
FROM user_profile
WHERE university = '复旦大学';

牛客网SQL题目:

计算男生人数以及平均GPA_牛客题霸_牛客网

 

题目:现在运营想要看一下男性用户有多少人以及他们的平均gpa是多少,用以辅助设计相关活动,请你取出相应数据。

示例:user_profile

iddevice_idgenderageuniversitygpa
12138male21北京大学3.4
23214male复旦大学4.0
36543female20北京大学3.2
42315female23浙江大学3.6
55432male25山东大学3.8
62131male28北京师范大学3.3

根据输入,你的查询应返回以下结果,结果使用round保留到小数点后面1位。

我们可以利用SUM函数求取gpa字段的和,然后对人数进行统计,求取平均值。用单行数值函数ROUND来保留小数。

SELECT COUNT(gender) "male_num",
ROUND(SUM(gpa)/COUNT(gender),1) "avg_gpa"
FROM user_profile
WHERE gender = 'male';

 也可以直接使用AVG函数对gap进行求平均值。

SELECT count(gender) "male_num" ,
round(avg(gpa),1) "avg_gpa"
FROM user_profile
WHERE gender = 'male';
http://www.lryc.cn/news/607218.html

相关文章:

  • 逻辑回归----银行贷款模型优化
  • 【C++/STL】vector基本介绍
  • git pull和git fetch的区别
  • Linux---编辑器vim
  • vi/vim跳转到指定行命令
  • 达梦数据库权限体系详解:系统权限与对象权限
  • Js引用数据类型和ES6新特性
  • X2Doris是SelectDB可视化数据迁移工具,安装与部署使用手册,轻松进行大数据迁移
  • 向量投影计算,举例说明
  • rhcsa笔记大全
  • 华锐矩阵世界平台与海外客户洽谈合作
  • 网络协议之路由是怎么回事?
  • [buuctf-misc]百里挑一
  • 雷达微多普勒特征代表运动中“事物”的运动部件。
  • SD-WAN在煤矿机械设备工厂智能化转型中的应用与网络架构优化
  • Apache Flink 2.1.0: 面向实时 Data + AI 全面升级,开启智能流处理新纪元
  • forceStop流程会把对应进程的pendingIntent给cancel掉
  • C++ --- stack和queue的使用以及简单实现
  • 【AI问答】PromQL中interval和rate_interval的区别以及Grafana面板的配置建议
  • UE5 动态扫描波
  • python入门第一天---变量+数据类型及注释的使用
  • SpringAI智能客服Function Calling兼容性问题解决方案
  • LRU缓存淘汰算法的详细介绍与具体实现
  • 简单打包应用
  • pve 删除集群
  • AI+向量化
  • 超算中尝试安装dify(失败)
  • Windows编译安装ffmpeg和sdl
  • 电子电气架构 --- 软件项目变更管理
  • Squid服务配置代理