Mysql入门技能树-聚合和分组

文章介绍了MySQL中的聚合和分组功能,包括COUNT、SUM、AVG、MAX和MIN等函数的用法。举例说明了如何计数、求和、查找最小值和最大值。还讨论了HAVING子句在筛选分组后的数据中的作用,以及如何结合GROUPBY进行复杂查询。
摘要由CSDN通过智能技术生成

前言

Mysql入门技能树
Mysql入门技能树

聚合和分组

MySQL聚合和分组是用来计算和汇总数据的函数和语句。它们可以将结果分成多个组,每个组可以有一个结果集。这些函数和语句的使用可以帮助你在MySQL中更好地处理大量数据。

以下是一些常用的MySQL聚合和分组函数:

  • COUNT:计算一个列中的行数
  • SUM:计算一个列中的总和
  • AVG:计算一个列中的平均值
  • MAX:找到一个列中的最大值
  • MIN:找到一个列中的最小值

计数

Joe 建立了一个名为items的表

mysql> select * from items;
+----+-----------+
| id | item      |
+----+-----------+
|  1 |         2 |
|  2 |      NULL |
|  3 |         9 |
|  4 | 534214123 |
+----+-----------+

当他执行

select count(*), count(item) 
from items;

会得到什么结果?
在这里插入图片描述

无正确答案
正确答案应该是4,3
知识点:
count(*)和count(1)都是统计表中所有的行数,包括null值的列
count(field)在列上统计个数,会忽略null值

求和

Joe 想要得到 orders 表

create table orders (
id int primary key auto_increment,
item_id int,
amount int,
unit_price decimal(12, 4),
total decimal(12, 4),
description varchar(2000),
ts timestamp default now(),
deal bool default false
);

中所有单价(unit_price)超过 1000 的订单中,已成交(deal 为 true)的总值(total),这个查询应该是:
在这里插入图片描述
正确答案是:D
A order by 是排序,没有限制deal 为 true
BC语法错误,having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚合函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。

最小值

Joe 想要得到 employee 表

create table employee
(
    id     serial primary key,
    name   varchar(256),
    dept   varchar(256),
    salary decimal(12, 4)
);

中每个部门工资最低的员工的工资信息,这条查询应该怎么写?
在这里插入图片描述
正确答案是:A
BCD中min()函数用法错误,在有结果情况下也只是一条记录,不满足题意各个部门,况且D中的total都不是表中的字段
MIN()函数可以和GROUP BY语句一起使用,用来查询数据表中每个分组下的某列数据的最小值

最大值

利用员工信息表Joe 做了一些关于 max 函数的练习,其中不正确的是:
在这里插入图片描述
在这里插入图片描述
不正确的是:A
如果要得到每个部门工资最高的员工的全部信息,该怎么实现呢?

select
	id,
	name,
	u1.dept,
	u1.salary
from
	employee u1
join (
	select
		dept,
		max(salary) as salary
	from
		employee
	group by
		dept
) u2 
on
	u1.dept = u2.dept
	and u1.salary = u2.salary
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空空star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值