SQL分组操作符与聚集函数(educoder)

任务描述
本关任务:

使用 group by 语句结合聚集函数解决数据统计问题 ;
数据统计
一般的数据统计关系代数表达式如下:

其中L是属性集。含义是在属性集L上分组,分组后用函数fun运算

表示按性别sex的不同取值分组,再计算每个不同性别的学生人数。
假设有下面关系,利用上述分组计数统计则能得到:
男 2
女 2

下面轮到你们来试一试了。

编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。
你只需根据右侧提示,完成以下任务:

1.补全右侧代码片段中 第一题 下 Begin-End 区间的代码,统计 course表中学分数(credit)大于2的课程门数;

2.补全右侧代码片段中 第二题 下 Begin-End 区间的代码,统计所有专业必修课(BT开头的课程代码)的学分总数。

3.补全右侧代码片段中 第三题 下 Begin-End 区间的代码,按课程类别统计每个类别课程的门数,如课程代码BT001,BT002都是专业必修课。

本题使用的关系如下:
course(cno,cname,credit)
对应课程代码,课程名称,学分,其中课程代码前2位代表不同类型的课程,如
BT 代表 专业必修课,XZ 代表专业限选课。

测试说明
测试过程:

本关涉及到的测试文件是 step1_test.sh ,平台将运行用户补全的 step1.sql 文件,得到数据;

将得到的数据与答案比较,判断代码是否正确。

USE test_wyy_db_guet
GO

SET NOCOUNT ON

 
-- ********** Begin ********** --
-- ********** 此处写第一题的SQL语句 ********** --
SELECT COUNT(credit)
FROM course
WHERE course.credit>2;

-- ********** End ********** --

GO
 
-- ********** Begin ********** --
-- ********** 此处写第二题的SQL语句 ********** --
SELECT SUM(credit)
FROM course
WHERE cno LIKE 'BT%';
-- ********** End ********** --

GO

 
-- ********** Begin ********** --
-- ********** 此处写第三题的SQL语句 ********** --
SELECT SUBSTRING(cno,1,2),COUNT(cno)
FROM course
GROUP BY SUBSTRING(cno,1,2);
-- ********** End ********** --

GO

任务描述
本关任务:

灵活使用分组操作和聚集函数实现数据统计功能
本关使用的关系为printer(model,color,type,price)
表示的含义是
model:打印机型号;
color:是否彩色, T 彩色,F 黑白
type:类型,ink-jet 表示喷墨, laser 表示激光;
price:单价

编程要求
1.补全右侧代码片段中 第一题 下 Begin-End 区间的代码,统计激光彩色打印机有多少种型号;
2.补全右侧代码片段中 第二题 下 Begin-End 区间的代码,找出最便宜的喷墨打印机价格。
3.补全右侧代码片段中 第三题 下 Begin-End 区间的代码,找出最贵的激光打印机型号和价格。
测试说明
测试过程:

本关涉及到的测试文件是 step2_test.sh ,平台将运行用户补全的 step2.sql 文件,得到数据;

将得到的数据与答案比较,判断代码是否正确。

USE test_wyy_db_guet
Go

SET NOCOUNT ON


-- ********** Begin ********** --
---------- 第一题----------
SELECT COUNT(DISTINCT model)
FROM printer
WHERE type='laser' AND color='T';
-- ********** End ********** --
GO


-- ********** Begin ********** --
---------- 第二题----------
SELECT MIN(price)
FROM printer
WHERE type='ink-jet';
-- ********** End ********** --
GO

-- ********** Begin ********** --
---------- 第三题----------
SELECT model,price
FROM printer
WHERE price IN (SELECT MAX(price) FROM printer WHERE type='laser') AND type='laser';
-- ********** End ********** --
GO

任务描述
本关任务:

灵活使用分组操作和聚集函数解决比较复杂的数据统计问题
本关使用的关系说明:

product(maker,model,type)
maker:表示生产厂商
model:生产的产品型号
type:产品类型,有pc laptop两种

pc(model,speed,ram,hd,price)
表示型号,速度,内存大小,硬盘大小,价格

laptop(model,speed,ram,hd,screen,price)
表示型号,速度,内存大小,硬盘大小,屏幕大小和价格
####编程要求

本题可使用视图V_test(视图已经创建完成,可直接使用,你不需要再次创建视图)
了解视图的详细信息可参考下面的创建视图语句:
create view V_test as
select product.maker,product.model,product.type,pc.price,pc.hd,pc.speed from product join pc on product.model=pc.model
union
select product.maker,product.model,product.type,laptop.price,laptop.hd,laptop.speed from product join laptop on product.model=laptop.model

1.补全右侧代码片段中 第1题 下 Begin-End 区间的代码,查询在一种或两种电脑(含PC和laptop)中出现过的硬盘的容量。

2.补全右侧代码片段中 第2题 下 Begin-End 区间的代码,统计各生产厂商生产的电脑(不区分pc和laptop)的平均处理速度的最大值。

3.补全右侧代码片段中 第3题 下 Begin-End 区间的代码,统计出各厂商生产价格高于1000的产品数量,不用区分是pc还是laptop

4.补全右侧代码片段中 第4题 下 Begin-End 区间的代码,分别统计各厂商生产的pc,laptop的平均价格。

测试说明
测试过程:

本关涉及到的测试文件是 step2_test.sh ,平台将运行用户补全的 step2.sql 文件,得到数据;

将得到的数据与答案比较,判断代码是否正确。

USE test_wyy_db_guet
Go

SET NOCOUNT ON

---------- 第1题 ----------
-- ********** Begin ********** --
SELECT hd
FROM V_test
GROUP BY hd
HAVING COUNT(*)<3;



-- ********** End ********** --

GO

---------- 第2题 ----------
-- ********** Begin ********** --
SELECT MAX(AvgSpeed) FROM(
SELECT maker AS maker,AVG(speed) AS AvgSpeed
FROM V_test
GROUP BY maker
)name;


-- ********** End ********** --

GO

---------- 第3题 ----------
-- ********** Begin ********** --
SELECT maker,COUNT(*)
FROM V_test
WHERE price>1000
GROUP BY maker;


-- ********** End ********** --

GO
---------- 第4题 ----------
-- ********** Begin ********** --
SELECT maker as maker,type,AVG(price)
FROM V_test
GROUP BY maker,type;


-- ********** End ********** --

GO

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高万禄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值