• 【SQL刷题】Day13----SQL分组数据专项练习


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

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

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

    前言

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

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

    主要原因有三点:

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

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

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

    一、分组

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

    主要函数:

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

    二、刷题

    1.刷题一

    (1)题目

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

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

    (2)难易程度

    难易程度:入门

    (3)示例

    1. 输入:
    2. DROP TABLE IF EXISTS `OrderItems`;
    3. CREATE TABLE IF NOT EXISTS `OrderItems`(
    4. order_num VARCHAR(255) NOT NULL COMMENT '商品订单号'
    5. );
    6. INSERT `OrderItems` VALUES ('a002'),('a002'),('a002'),('a004'),('a007');
    7. 输出:
    8. a004|1
    9. a007|1
    10. a002|3

    (4)代码

    1. select order_num,count(*) as order_lines
    2. from OrderItems
    3. group by order_num
    4. order by order_lines

    (5)运行截图

     

    2.刷题二

    (1)题目

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

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

    (2)难易程度

    难易程度:中等

    (3)示例

    1. 输入:
    2. DROP TABLE IF EXISTS `Products`;
    3. CREATE TABLE IF NOT EXISTS `Products` (
    4. `vend_id` VARCHAR(255) NOT NULL COMMENT '供应商ID',
    5. `prod_price` DOUBLE NOT NULL COMMENT '产品价格'
    6. );
    7. INSERT INTO `Products` VALUES ('a0011',100),
    8. ('a0019',0.1),
    9. ('b0019',1000),
    10. ('b0019',6980),
    11. ('b0019',20);
    12. 输出:
    13. vend_id|cheapest_item
    14. a0019|0.100
    15. b0019|20.000
    16. a0011|100.000

    (4)代码

    1. select vend_id,prod_price as cheapest_item
    2. from (
    3. select row_number() over(partition by vend_id order by prod_price asc) as row_num,
    4. vend_id,prod_price
    5. from Products) temp
    6. where row_num = 1
    7. order by cheapest_item;

    (5)运行截图

    3.刷题三

    (1)题目

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

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

    (2)难易程度

    难易程度:中等

    (3)示例

    1. 输入:
    2. DROP TABLE IF EXISTS `OrderItems`;
    3. CREATE TABLE IF NOT EXISTS `OrderItems`(
    4. order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',
    5. quantity INT(255) NOT NULL COMMENT '商品数量'
    6. );
    7. INSERT `OrderItems` VALUES ('a1',105),('a2',200),('a4',1121),('a5',10),('a7',5);
    8. 输出:
    9. a1
    10. a2
    11. a4

    (4)代码

    1. SELECT order_num
    2. FROM OrderItems
    3. GROUP BY order_num
    4. HAVING SUM(quantity) >= 100
    5. ORDER BY order_num

    (5)运行截图

    4.刷题四

    (1)题目

    题目:计算总和

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

    (2)难易程度

    难易程度:中等

    (3)示例

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

    (4)代码

    1. select order_num,sum(item_price*quantity) total_price from OrderItems
    2. group by order_num
    3. having total_price>=1000
    4. order by order_num

    (5)运行截图

    5.刷题五

    (1)题目

    题目:纠错3

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

    1. SELECT order_num, COUNT(*) AS items
    2. FROM OrderItems
    3. GROUP BY items
    4. HAVING COUNT(*) >= 3
    5. ORDER BY items, order_num;

    (2)难易程度

    难易程度:简单

    (3)示例

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

    (4)代码

    1. SELECT order_num, COUNT(*) AS items
    2. FROM OrderItems
    3. GROUP BY order_num
    4. HAVING items >= 3
    5. ORDER BY items, order_num;

    (5)运行截图

    三、小结

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

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

  • 相关阅读:
    拿到第一个用户并提权
    玩机进阶教程------修改gpt.bin分区表地址段 完全屏蔽系统更新 fast刷写分区表 操作步骤解析【二】
    【C】程序环境和预处理
    力扣46. 全排列
    JVM——2.JVM的内存结构
    cesium 实现地图环境功能 - 雨,雪,雾特效
    【计算机网络知识】TLS/SSL的工作原理和HTTPS的优缺点
    odoo javascript参考(五)
    C#WPF相对好看的登录界面
    react render的作用
  • 原文地址:https://blog.csdn.net/weixin_50481708/article/details/126694030