前言
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