表ssndata数据如下图所示,方便查询对比结果:
sum()函数返回数值列的总数
select sum(age) from ssndata;
COUNT() 函数返回匹配指定条件的行数
#COUNT(*) 统计所有的行数,包括为null的行
select count(*) from ssndata;
#count(column_name)查询列名那一列的,字段为null不统计 //count(列名)
select count(column_name) from table_name;
select count(id) from ssndata;
#count(distinct column_name) //distinct去重
select count(distinct name) from ssndata;
#count(1)计算一共有多少符合条件的行,不会忽略null值
select count(1) from ssndata;
#注意点:
a.少用count(*) count(column_name)可用
count(0)统计第一个表头字段的行数
b.sum(age)数值求和 count(*)行数相加
根据需求判断是数值求和还是说计算行数
举例:统计年龄小于20的人数 //不能写出sum(age)
select count(age) from ssndata where age < 20;
c.根据需求判断是否需要count(distinct column_name) 去重
#求各个名称的年龄和
select name,sum(age) from ssndata group by name;
group by 根据一个或多个列对结果集进行分组
#求年龄小于25岁的各个名称的年龄和
子查询:
select t.name,sum(t.age) from ( select * from ssndata where age < 25 ) as t group by t.name ;
select name,sum(age) from ssndata where age <25 group by name;
#求各个名称的年龄和大于25的
select name,sum(age) from ssndata group by name having sum(age)>25;
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
聚合函数(count()、sum()、avg()、max()、min() )
HAVING 子句可以让我们筛选分组后的各组数据。
select * from (select name,sum(age) as sumage from ssndata group by name) as t where t.sumage >25;
#用户年龄从大到小进行排列
select * from duodata.ssndata order by age desc ;
order by用于对结果集进行排序
默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 desc 关键字
asc升序
总结:
select yyy from ssndata
where xxx
group by xxx having xxx
order by xxx
limit xxx ;