聚合函数
使用聚合函数查询是纵向查询,它是对 一列的值进行计算,然后返回一个单一的值;聚合函数会忽略空值。
count:统计指定列不为NULL的记录行数;
sum:计算指定列的数值和;
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串类型不是数值类型,那么计算结果为0 排0序运算;
min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
例如:
-- count 求和,对表中的数据的个数求和 count(列名) -- 查询统计账务表中,一共有多少条数据
SELECT COUNT(zid) cou from zhangwu;
SELECT COUNT(*) FROM zhangwu;
SELECT COUNT(zid) FROM zhangwu where zmoney>=1000;
-- sum求和,对一列中数据进行求和计算 sum(列名) -- 对账务表查询,对所有的金额求和计算
SELECT sum(zmoney) from zhangwu;
SELECT sum(zmoney) from zhangwu where zmoney>=1000;
-- 求和,统计所有支出的总金额 SELECT sum(zmoney) from zhangwu where zname LIKE '%支出';
-- max 函数,对某列数据,获取最大值
SELECT max(zmoney) from zhangwu;
SELECT min(zmoney) from zhangwu;
-- avg 函数,计算一个列所有数据的平均数
SELECT avg(zmoney) from zhangwu;
SELECT avg(zid) from zhangwu;
分组 group by
使用格式:
分组查询是指使用group by字句对查询信息进行分组,例如:我们要统计出zhangwu表中所有分类账务的总数量,这时 就需要使用group by 来对zhangwu表中的账务信息根据parent进行分组操作。
SELECT 字段1,字段2… FROM 表名 GROUP BY 字段 [HAVING 条件];
分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
having与where的区别
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
顺序问题
select 字段 from 表 where + group by [having ]+order by + limit
SELECT s_classid,COUNT(*) -- 4 投影
FROM t_student -- 1 把表加载到内存
WHERE age=10 -- 2 筛选
GROUP BY s_classid -- 3 分组
HAVING(COUNT(*)>=1) -- 5 二次筛选 首先要得到第一次的结果 才可以进行筛选
ORDER BY COUNT(*) DESC -- 6 二次分组
LIMIT 1 -- 7 限定行数 肯定是你执行完之后最终的结果的 行数