使用聚合函数查询计算
count 求和,对表中单位数据的个数求和,count(列名)
-- 查询统计账务表中一共多少条数据
注意:函数和括号中间不能有空格!!!!
SELECT COUNT (*) AS 'count' FROM zhangwu;
-- sum 求和函数,对以列中的函数求和计算sum(列名)
-- 对账务表查询,对所有金额求和计算
SELECT SUM(zmoney) FROM zhangwu;
-- 求和,统计所有支出的金额
SELECT SUM(zmoney) FROM zhangwu WHERE zname LIKE '%支出%';
INSERT INTO zhangwu(zname) VALUES ('彩票支出');
DELETE FROM zhangwu WHERE zname='彩票';
-- max 函数,对某列数据获取最大值
SELECT MAX(zmoney) FROM zhangwu;
-- avg 函数,计算一个列的所有数据的平均值
SELECT AVG(zmoney) FROM zhangwu;
分组查询:
group by 被分组的列名必须跟随聚合函数
select 查询的时候,被分组的列,要出现在select选择列的后面
-- 对zname内容进行分组查询求和,但是只是要支出
SELECT SUM(zmoney)AS 'getsum',zname FROM zhangwu WHERE zname LIKE '%支出%'
GROUP BY zname
ORDER BY 'getsum' DESC;
-- 对zname内容进行分组查询求和,但是只要支出,显示金额大于5000
-- 结果集是分组查询后,再次进行筛选,不能使用where,分组后再次过滤用having
SELECT SUM(zmoney) AS 'getsum',zname FROM zhangwu WHERE zname LIKE '%支出%'
GROUP BY zname HAVING getsum>5000;
select,from---where---group by---having---order by
SELECT SUM(zmoney) AS 'getsum',zname FROM zhangwu WHERE zname LIKE'%支出%'
-- 先分组,有条件加having
GROUP BY zname HAVING getsum>5000
-- 后排序
ORDER BY getsum DESC;
* 注意:
* 聚合函数与分组的使用效果
* 使用聚合函数后再进行分组, 才相当于汇总统计
* `SELECT zname, SUM(zmoney) FROM zhangwu GROUP BY zname;`
* 不使用聚合函数的分组, 只有第一条记录的值
* `SELECT zname, zmoney FROM zhangwu GROUP BY zname;`
* `HAVING`和`WHERE`的区别
* 过滤时机不同
* WHERE是在分组前先对查询结果进行过滤
* HAVING是在查询结果分组后再次过滤
* 是否可跟随聚合函数不同
* WHERE条件中不可使用聚合函数
* HAVING条件中可以使用聚合函数
* 条件可用列名不同
* HAVING条件中的列名必须是SELECT或GROUP BY中使用过的列名
* WHERE条件中可以使用表的所有列名