任务描述
本关任务:在用户表account中按性别sex统计客户人数。
相关知识
为了完成本关任务,你需要掌握:group by。
语法
GROUP BY子句主要用于根据字段对行分组。例如,根据学生所学的专业对XS表中的所有行分组,结果是每个专业的学生成为一组。GROUP BY子句的语法格式如下:
GROUP BY {列名 |表达式 | 列编号} [ASC | DESC], ...
[WITH ROLLUP]
GROUP BY子句后通常包含列名或表达式。MySQL对GROUP BY子句进行了扩展,可以在列的后面指定ASC(升序)或DESC(降序)。GROUP BY可以根据一个或多个列进行分组,也可以根据表达式进行分组,经常和聚合函数一起使用。
测试如下:
第16关:order by与limit
任务描述
本关任务:在orders表中查询最早在宠物商店购买过商品的3位用户的用户号userid。
相关知识
为了完成本关任务,你需要掌握:
语法
1.order by
在一条SELECT语句中,如果不使用ORDER BY子句,结果中行的顺序是不可预料的。使用ORDER BY子句后可以保证结果中的行按一定顺序排列。
语法格式:
ORDER BY {列名 | 表达式 | 列编号} [ASC | DESC] , ...
说明:ORDER BY子句后可以是一个列、一个表达式或一个正整数。正整数表示按结果表中该位置上的列排序。例如,使用ORDER BY 3表示对SELECT的列清单上的第3列进行排序。
关键字ASC表示升序排列,DESC表示降序排列,系统默认值为ASC。
2.limit
LIMIT子句是SELECT语句的最后一个子句,主要用于限制被SELECT语句返回的行数。
语法格式:
LIMIT {[offset,] row_count
| row_count OFFSET offset}
语法格式中的offset和row_count都必须是非负的整数常数,offset指定返回的第一行的偏移量,row_count是返回的行数。例如,“LIMIT 5”表示返回SELECT语句的结果集中最前面5行,而“LIMIT 3,5”则表示从第4行开始返回5行。值得注意的是初始行的偏移量为0而不是1。
测试如下:
第17关:having
任务描述
本关任务:查询订单详情表lineitem中商品购买总数量超过6件的订单编号orderid、商品编号itemid和购买总数sum(quantity) as total。按购买总数total从大到小排列。
相关知识
为了完成本关任务,你需要掌握:group by,order by,having。
语法
1.group by
GROUP BY子句主要用于根据字段对行分组。例如,根据学生所学的专业对XS表中的所有行分组,结果是每个专业的学生成为一组。GROUP BY子句的语法格式如下:
GROUP BY {列名 |表达式 | 列编号} [ASC | DESC], ...
[WITH ROLLUP]
GROUP BY子句后通常包含列名或表达式。MySQL对GROUP BY子句进行了扩展,可以在列的后面指定ASC(升序)或DESC(降序)。GROUP BY可以根据一个或多个列进行分组,也可以根据表达式进行分组,经常和聚合函数一起使用。
2.order by
在一条SELECT语句中,如果不使用ORDER BY子句,结果中行的顺序是不可预料的。使用ORDER BY子句后可以保证结果中的行按一定顺序排列。
语法格式:
ORDER BY {列名 | 表达式 | 列编号} [ASC | DESC] , ...
说明:ORDER BY子句后可以是一个列、一个表达式或一个正整数。正整数表示按结果表中该位置上的列排序。例如,使用ORDER BY 3表示对SELECT的列清单上的第3列进行排序。
关键字ASC表示升序排列,DESC表示降序排列,系统默认值为ASC。
3.having
使用HAVING子句的目的与WHERE子句类似,不同的是WHERE子句是用来在FROM子句之后选择行,而HAVING子句用来在GROUP BY子句后选择行。例如,查找XSCJ数据库中平均成绩在85分以上的学生,就是在XS_KC表上按学号分组后筛选出符合平均成绩大于等于85的学生。
语法格式:
HAVING 条件
其中,where_definition是选择条件,条件的定义和WHERE子句中的条件类似,不过HAVING子句中的条件可以包含聚合函数,而WHERE子句中则不可以。
SQL标准要求HAVING必须引用GROUP BY子句中的列或用于聚合函数中的列。不过,MySQL支持对此工作性质的扩展,并允许HAVING引用SELECT清单中的列和外部子查询中的列。
测试如下: