博主昵称:跳楼梯企鹅
博主主页面链接:博主主页传送门

博主专栏页面连接:专栏传送门–网路安全技术
创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。
博主座右铭:发现光,追随光,成为光,散发光;
博主研究方向:渗透测试、机器学习 ;
博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;

学习网站跳转链接:牛客刷题网

前言

给大家推荐一款很好的刷题软件牛客刷题网—一起学SQL

博主为什么喜欢用这个网站学习呢?

主要原因有三点:

1.内部含有大量面试题库

2.覆盖行业范围比较全面

3.刷题的题目是按照简单到难的过程

一、分组

简介:分组是在SELECT语句的GROUP BY子句中建立的。分组允许把数据分为多个逻辑组, 以便能对每个组进行聚集计算

主要函数:

ORDER BYGROUP BY
排序产生的输出分组行。但输出可能不是分组的顺序
任意列都可使用(甚至非选择的列也可以使用)只可能使用选择列或表达式列,而且必须使用每个选择列表达式
不一定需要如果与聚集函数一起使用列(或表达式),则必须使用

二、刷题

1.刷题一

(1)题目

题目:返回每个订单号各有多少行数

描述:编写 SQL 语句,返回每个订单号(order_num)各有多少行数(order_lines),并按 order_lines对结果进行升序排序。

(2)难易程度

难易程度:入门

(3)示例

输入:DROP TABLE IF EXISTS `OrderItems`;CREATE TABLE IF NOT EXISTS `OrderItems`(order_num VARCHAR(255) NOT NULL COMMENT '商品订单号');INSERT `OrderItems` VALUES ('a002'),('a002'),('a002'),('a004'),('a007');输出:a004|1a007|1a002|3

(4)代码

select order_num,count(*) as order_linesfrom OrderItemsgroup by order_numorder by order_lines

(5)运行截图

2.刷题二

(1)题目

题目:每个供应商成本最低的产品

描述:编写 SQL 语句,返回名为 cheapest_item 的字段,该字段包含每个供应商成本最低的产品(使用 Products 表中的 prod_price),然后从最低成本到最高成本对结果进行升序排序。

(2)难易程度

难易程度:中等

(3)示例

输入:DROP TABLE IF EXISTS `Products`;CREATE TABLE IF NOT EXISTS `Products` (`vend_id` VARCHAR(255) NOT NULL COMMENT '供应商ID',`prod_price` DOUBLE NOT NULL COMMENT '产品价格');INSERT INTO `Products` VALUES ('a0011',100),('a0019',0.1),('b0019',1000),('b0019',6980),('b0019',20);输出:vend_id|cheapest_itema0019|0.100b0019|20.000a0011|100.000

(4)代码

select vend_id,prod_price as cheapest_itemfrom (select row_number() over(partition by vend_id order by prod_price asc) as row_num,vend_id,prod_pricefrom Products) tempwhere row_num = 1order by cheapest_item; 

(5)运行截图

3.刷题三

(1)题目

题目:返回订单数量总和不小于100的所有订单的订单号

描述:请编写 SQL 语句,返回订单数量总和不小于100的所有订单号,最后结果按照订单号升序排序。

(2)难易程度

难易程度:中等

(3)示例

输入:DROP TABLE IF EXISTS `OrderItems`;CREATE TABLE IF NOT EXISTS `OrderItems`(order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',quantity INT(255) NOT NULL COMMENT '商品数量');INSERT `OrderItems` VALUES ('a1',105),('a2',200),('a4',1121),('a5',10),('a7',5);输出:a1a2a4

(4)代码

SELECT order_numFROM OrderItemsGROUP BY order_numHAVING SUM(quantity) >= 100ORDER BY order_num

(5)运行截图

4.刷题四

(1)题目

题目:计算总和

描述:编写 SQL 语句,根据订单号聚合,返回订单总价不小于1000 的所有订单号,最后的结果按订单号进行升序排序。提示:总价 = item_price 乘以 quantity

(2)难易程度

难易程度:中等

(3)示例

输入:DROP TABLE IF EXISTS `OrderItems`;CREATE TABLE IF NOT EXISTS `OrderItems`(order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',item_price INT(16) NOT NULL COMMENT '售出价格',quantity INT(16) NOT NULL COMMENT '商品数量');INSERT `OrderItems` VALUES ('a1',10,105),('a2',1,1100),('a2',1,200),('a4',2,1121),('a5',5,10),('a2',1,19),('a7',7,5);输出:a1|1050.000a2|1319.000a4|2242.000

(4)代码

select order_num,sum(item_price*quantity) total_price from OrderItemsgroup by order_numhaving total_price>=1000order by order_num

(5)运行截图

5.刷题五

(1)题目

题目:纠错3

描述:将下面代码修改正确后执行

SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY items HAVING COUNT(*) >= 3 ORDER BY items, order_num;

(2)难易程度

难易程度:简单

(3)示例

输入:DROP TABLE IF EXISTS `OrderItems`;CREATE TABLE IF NOT EXISTS `OrderItems`(order_num VARCHAR(255) NOT NULL COMMENT '商品订单号');INSERT `OrderItems` VALUES ('a002'),('a002'),('a002'),('a004'),('a007');输出:a002|3

(4)代码

SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY order_num HAVING items >= 3 ORDER BY items, order_num;

(5)运行截图

三、小结

本片文章为MySQL刷题系列文章,第十三天!

欢迎小伙伴一起来刷题,点击右边链接牛客——刷题网