第1关:AVG() 函数的使用
任务描述
本关任务:使用函数 AVG() 计算数据表中指定字段的平均值。
相关知识
为了完成本关任务,你需要掌握:1. AVG() 函数的含义,2. AVG() 函数的用法。
返回某一字段的平均值
AVG() 函数通过计算某字段(列)内容(行)的个数和它们的数值之和来返回某一字段的平均值。
语法规则为:
SELECT AVG(column_name)
FROM table_name
举个例子
我们想从表 Customers 中,检索到所有消费者消费金额的平均值。
表 Customers 的内容如下表所示:
在这里插入图片描述
输入:
SELECT AVG(cost) as avg_cost
FROM Customers
输出:
| | avg_cost |
| ———— |
| 1 | 2415.26 |
在这个例子里, SELECT 语句只负责返回一个值,这个值就是 avg_cost 。 avg_cost 是我们为检索数据起的“小名”,它包含着所有消费者消费金额的平均值。
Tips:
如果你没有为你的检索结果起个“小名”, 那它就只能是供你观赏的一个值,在接下来的操作中,你将不能继续使用它。所以为了以防万一,好的习惯是为自己每一个检索结果,都起一个有意义的名字,好看又好记。
返回某一字段指定内容的平均值
AVG() 函数不仅能计算某字段(列)的平均值,如果你愿意,还能为 SELECT 语句增加条件,以此来计算某些特定条件下某字段的平均值。
举个例子
我们想从表 Customers 中,检索到所有叫 Alice 的消费者消费金额的平均值。表 Customers 的内容与上例一致。
输入:
SELECT AVG(cost) as avg_alice_cost
FROM Customers
WHERE cust_name LIKE ‘Alice%’
与上例不同的是,我们在这里加入了条件筛选语句 WHERE。WHERE 语句帮我们过滤了所有不叫 Alice 的人,因此,我们所查到的消费金额平均值是所有叫 Alice 的人的消费平均值。
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。你只需补全右侧代码片段中 Begin-End 区间的代码,返回表 Products 中商品价格( prod_price )大于平均值的商品的 prod_name 和 prod_price。
其中表 Products 的内容如下表所示:
在这里插入图片描述
提示:
与本关例子不同的是,在练习中需要你们返回的是 prod_name 和 prod_price,而不是平均值;
与本关例子不同的是,在练习中需要你们设置的过滤条件是平均值;
SELECT 语句是可以嵌套使用的,比如有如下形式的代码:
SELECT column_A
FROM table
WHERE column_A < (SELECT column_B FROM table)
测试说明
测试过程:
本关涉及到的测试文件是 step1_test.sh,平台将运行用户补全的 step1.sql 文件,得到数据;
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
在这里插入图片描述
参考代码:

USE Mall
GO
SET NOCOUNT ON
------ return two columns that the price bigger than average price ------
-- ********** Begin ********** --
SELECT  prod_name,prod_price
FROM Products
WHERE prod_price>(SELECT AVG (prod_price) FROM Products)
-- ********** End ********** --
GO

第2关:COUNT() 函数的使用
任务描述
本关任务:使用函数 COUNT(),计算数据表中指定字段(列)的内容(行)个数。
相关知识
为了完成本关任务,你需要掌握:1. COUNT() 函数的含义,2. COUNT() 函数的用法。
返回内容(行)的个数
COUNT() 函数的作用就像它的函数名一样能让大家一目了然,没错,它就是用来计数的。
COUNT() 函数有两种使用方法:
使用 COUNT() 能对整张表的内容(行)进行计数,不管内容(行)是有值还是空值。
使用 COUNT(字段) 能对某一字段的内容(行)进行计数,但是会忽略 NULL 值。
语法规则为:
1.
SELECT COUNT(
)
FROM 表名
2.
SELECT COUNT(字段名)
FROM 表名
举个例子
我们想从表 Customers 中,检索到整张表一共有多少内容(行)。
表 Customers 的内容如下图所示:
在这里插入图片描述
输入:
SELECT COUNT() AS nums
FROM Customers
输出:
在这里插入图片描述
检索过程为:
在这里插入图片描述
在这个例子里, COUNT(
) 用来对整张表的内容(行)进行计数,忽略了内容是否为空值。计数的结果最后返回到了 nums 。
再举个例子
我们想从表 Customers 中,检索到究竟有多少人拥有邮箱地址。表 Customers 的内容与上例一致。
输入:
SELECT COUNT(cust_email) AS nums
FROM Customers
输出:
在这里插入图片描述
检索过程为:
在这里插入图片描述
SELECT 语句使用了 COUNT(cust_email) 来对 cust_email 字段下的非空值进行计数。在这个例子中,我们看到有五分之四的人拥有自己的邮箱。
Tips:
当我们指定对某一个字段(列)进行计数时,COUNT() 就会忽略 NULL 对非空值进行计数。但是如果没有指定字段(列),使用 COUNT(*) 对整体内容(行)进行计数,计数就会包含空值行。这点要时刻保持清醒!
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。你只需补全右侧代码片段中 Begin-End 区间的代码,返回表 Products 中商品价格( prod_price )大于 10 的商品个数(只需返回数量即可)。
其中表 Products 的内容不公开,但是已知每个产品的价格非空。期待你的发挥!
测试说明
测试过程:
本关涉及到的测试文件是 step2_test.sh ,平台将运行用户补全的 step2.sql 文件,得到数据;
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
在这里插入图片描述
参考代码:

USE Mall
GO
SET NOCOUNT ON
------ return the number of product which price bigger than 10 -----
-- ********** Begin ********** --
SELECT COUNT(prod_price) 
FROM Products
WHERE prod_price>10
-- ********** End ********** --
GO

第3关:MAX() 函数和 MIN() 函数的使用
任务描述
本关任务:1. 使用函数 MAX() 计算数据表中指定字段的最大值;2. 使用函数 MIN() 计算数据表中指定字段的最小值。
相关知识
为了完成本关任务,你需要掌握:
MAX() 函数的含义;
MAX() 函数的用法;
MIN() 函数的含义;
MIN() 函数的用法。
MAX() 函数的使用
MAX() 函数能够返回某一字段(列)的最大值。值得注意的是,要想使用 MAX() 函数,就一定需要有特定的字段(列)与之配对,不能偷懒用通配符 * 作参数。
语法规则为:
SELECT MAX(字段名)
FROM 表名
举个例子
我们想从表 Customers 中,检索到所有消费者消费金额的最高值。
表 Customers 的内容如下图所示:
在这里插入图片描述
输入:
SELECT MAX(cost) as max_cost
FROM Customers
输出:
在这里插入图片描述
Tips:
虽然 MAX() 函数经常用于寻找最大的数值型数字,但是有些(不是所有)数据库管理系统允许将 MAX() 函数用于字符型数据。当用于字符型数据时, MAX() 函数将会为我们返回 某字段(列) 的最后一个数据内容。
比如如下检索过程:
在这里插入图片描述
字段(列)cust_email 存储的是字符型数据,却能用来返回该字段最后一个数据内容。
Tips:
MAX() 函数会直接忽略在检索过程中碰见的空值 NULL。
MIN 函数的使用
与 MAX() 函数相反,MIN() 函数能够返回某一字段(列)的最小值。
语法规则为:
SELECT MIN(字段名)
FROM 表名
Tips:
虽然 MIN() 函数经常用于寻找最小的数值型数字,但是有些(不是所有)数据库管理系统允许将 MIN() 函数用于字符型数据。当用于字符型数据时,MIN() 函数将会为我们返回某字段(列)的第一个数据内容。
Tips:
MIN() 函数同样也会直接忽略在检索过程中碰见的空值 NULL 。
MIN() 函数就讲这么多了,没有例子?剩下的需要你们亲自来完成。
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。你只需补全右侧代码片段中 Begin-End 区间的代码,返回表 Products 中商品价格( prod_price )最小的商品的 prod_name 和 prod_price。
其中表 Products 的内容不公开,但是已知每个产品的价格非空。
提示:
与本关例子不同的是,在练习中需要你们返回的是 prod_name 和 prod_price,而不是最小值;
与本关例子不同的是,在练习中需要你们设置的过滤条件是最小值。
SELECT 语句是可以嵌套使用的,比如有如下形式的代码:
SELECT column_A
FROM table
WHERE column_A = (SELECT column_B FROM table)
期待你的发挥!
测试说明
测试过程:
本关涉及到的测试文件是 step3_test.sh,平台将运行用户补全的 step3.sql 文件,得到数据;
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
在这里插入图片描述
参考代码:

USE Mall
GO
SET NOCOUNT ON
------ return the price of the least expensive item ------
-- ********** Begin ********** --
SELECT  prod_name,prod_price
FROM Products
WHERE prod_price=(SELECT MIN (prod_price) FROM Products)
-- ********** End ********** --
GO

第4关:SUM() 函数的使用
任务描述
本关任务:使用函数 SUM(),计算数据表中指定字段的数值之和。
相关知识
为了完成本关任务,你需要掌握:1. SUM() 函数的含义,2. SUM() 函数的用法。
返回某一字段的数值之和
SUM() 是用来返回某一字段(列)数值总和的函数,初学的学习者很容易把它和 COUNT() 函数搞混。
因为在某个条件下,他们返回的是相同的值。比如,在你要统计的字段的内容(行) 都为 1 时,不管你是进行计数还是加和,结果都是相同的。
在这里插入图片描述
但是只要记住,COUNT() 函数只能用来计数就可以了,就像数鸭子一样。
下面,我们来看看如何使用 SUM() 函数。
语法规则为:
SELECT SUM(字段名)
FROM 表名
举个例子
我们想从表 Customers 中,检索所有消费者消费金额的总和。
表 Customers 的内容如下图所示:
在这里插入图片描述
输入:
SELECT SUM(cost) as total
FROM Customers
输出:
在这里插入图片描述
在这个例子中,SUM(cost) 函数为我们返回了 cost 字段中所有内容的加和,非常方便。
返回某一字段经过计算后的数值之和
你以为 SUM() 函数只能这么用吗?它还有更棒的地方,我们还可以在函数内做你喜欢的计算,说起来,它就是数学中的∑符号。
举个例子
如果商场决定为每一位顾客打八折,那商场在原基础上将会损失多少营业额呢?
表 Customers 的内容与上例相同。
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。
你只需:
补全右侧代码片段中 Begin-End 区间的代码,这次我们在表 Products 中增加了 quantity(数量)字段,请返回所有商品的价格与数量乘积的总和(即总库存的金额),并命名它为 amount。
其中表 Products 的内容如下表所示:
在这里插入图片描述
测试说明
本关涉及到的测试文件是 step4_test.sh ,平台将运行用户补全的 step4.sql 文件,得到数据;
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
在这里插入图片描述
参考代码:

USE Mall
GO
SET NOCOUNT ON
------ return the amount of all products ------
-- ********** Begin ********** --
SELECT SUM(prod_price * quantity) as amount
FROM products
-- ********** End ********** --
GO
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐