/*----【排序查询 order by】----*/
SELECT * FROM t_user;
-- 需求:按数学成绩从低到高排序,缺考的排到最后
SELECT * FROM t_user ORDER BY math;
SELECT * FROM t_user ORDER BY math ASC;-- ASC表示升序,默认排序方式就是升序
-- 需求:按英语成绩从高到低排序,缺考的排到最上面
SELECT * FROM t_user ORDER BY english DESC;-- 缺考的为NULL值,默认会排到最后
SELECT * FROM t_user ORDER BY IFNULL(english,101) DESC;
-- 需求:依次按数学成绩、英语成绩由高到低排列
SELECT * FROM t_user ORDER BY math DESC,english DESC;-- 多字段联合排序
-- 需求:依次按总分、数学成绩、英语成绩由高到低排列
SELECT
id,
NAME,
age,
gender,
address,
math,
english,
math + english AS totalScore
FROM
t_user
ORDER BY math + english DESC,
math DESC,
english DESC ;
SELECT * FROM t_user;
/*----【聚合函数】----*/
-- 语法格式:select 聚合函数名(字段名) from 表名;
-- 需求:查询英语最高分是多少
SELECT MAX(english) FROM t_user;
-- 需求:查询英语最高分是谁,如果有并列最高的,都输出
SELECT NAME,english FROM t_user WHERE english=MAX(english);-- ---------------?????????
-- 需求:查看有多少人
SELECT COUNT(id) FROM t_user;-- 一般选用主键进行计算,因为主键是不允许空值的。
SELECT COUNT(english) FROM t_user;-- 英语成绩中有一个NULL值,聚合函数计算是排除NULL值,结果会少1条
SELECT COUNT(IFNULL(english,0)) FROM t_user;-- 对NULL的处理
SELECT COUNT(*) FROM t_user;-- 直接输入一个"*",也是统计有多少条记录
SELECT * FROM t_user;
/*----【分组查询 group by】----
group by常结合 where子句、having子句一起用
语法格式:
select 字段1,字段2... from 表名 [where 条件表达式] group by 要分组的字段名 [having 条件表达式];
*/
-- 需求:将所有人按性别进行分组
-- select后的字段,一般都是写“要分组的字段”或者“聚合函数”
SELECT gender FROM t_user GROUP BY gender;
SELECT * FROM t_user GROUP BY gender;-- 筛选结果极具误导性,不能用这种方式去查询
-- 需求:分别查询男生、女生的数学平均分
SELECT gender,AVG(math) FROM t_user GROUP BY gender;
-- 需求:分别查询男生、女生的数学平均分。缺考及低于60分的人,不参与统计。
SELECT gender,AVG(math) FROM t_user WHERE math>=60 GROUP BY gender;
-- 需求:按男女性别分开,对各自的高分人群的数学均分进行统计。高分指90及以上。
SELECT gender,AVG(math) FROM t_user WHERE math>=90 GROUP BY gender;
-- 需求:分别查询男、女同学的数学均分,人数。
-- 要求:分数低于70分的人不参与分组;
-- 分组统计的结果中,参与统计的人数要大于2个人。
SELECT
gender,
AVG(math),
COUNT(id)
FROM
t_user
WHERE math >= 70
GROUP BY gender
HAVING COUNT(id) > 2 ;
SELECT * FROM t_user;
/*----【分页查询 limit子句】----*/
-- limit子句的格式:limit offset,length;
-- 需求:查询t_user表中第3~8行数据
SELECT * FROM t_user LIMIT 3,6; |
|