首页 > 数据库 >力扣1070(MySQL)-产品销售分析Ⅲ(中等)

力扣1070(MySQL)-产品销售分析Ⅲ(中等)

时间:2023-04-08 10:46:42浏览次数:44  
标签:product MySQL sales 1070 力扣 year 排序 id select

题目:

销售表 Sales

 产品表 Product

编写一个 SQL 查询,选出每个销售产品 第一年 销售的 产品 id、年份、数量 和 价格。

结果表中的条目可以按 任意顺序 排列。

查询结果格式如下例所示:

示例1:

 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/product-sales-analysis-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

法一:先获取每个产品id以及最小年份,再进行查找。

1 select product_id,year as first_year,quantity,price
2 from sales
3 where (product_id,year) in
4 (
5   select product_id,min(year)
6   from sales
7   group by product_id
8 )

 法二:先使用窗口函数将年份排序,然后再筛选出序数为1的数据

1 select product_id,year as first_year,quantity,price
2 from (
3    select product_id,year,quantity,price,rank() over(partition by 
4    product_id order by year) as rnk
5    from sales
6 ) as temp
7 where rnk = 1;

注意:应该使用rank()而不是row_number()

使用rank() over()排序是相同年份序数一样,例如:[1, 1, 3]

 而 row_number()排序是相同的不相同的都连续排序,例如:【1,2,3,4】,这时候如果选择rnk = 1,只会宣出那一年的第一组数据

错误思路❌:

将Sales表按照product_id进行分组,然后用min()找到最小值,但是这种如果第一年有多个该product_id的定单就找不到,只能找到该产品那一年的第一条记录,而不是所有那一年的记录。【由于练习用的1068产品销售Ⅰ的表,因此下面查询语句中的表是sales_1068】

例如:我把数据改成这样

得到的结果如下:只能找到第一年的第一条记录,而不是所有记录

 

标签:product,MySQL,sales,1070,力扣,year,排序,id,select
From: https://www.cnblogs.com/liu-myu/p/17298097.html

相关文章

  • Mysql_无法删除数据库的处理方法
    问题现象使用Navicat删除数据库一直转圈定位问题执行 SHOWPROCESSLIST;  提示元数据无法被锁定执行  select*frominformation_schema.innodb_trx\G; 发现有进程一直处于运行中解决方法kill进程id 重新查看没有 Waiting进程,showdatabases; 发现库已被......
  • 0-MySQL常见错误代码及代码说明
    先转载一下优秀作者的文章,后期会逐渐完善! 作者:理想三旬出处:https://www.cnblogs.com/operationhome/p/9095522.html......
  • 力扣1069(MySQL)-产品分析Ⅱ(简单)
    题目:编写一个SQL查询,按产品idproduct_id来统计每个产品的销售总量。查询结果格式如下面例子所示: 解题思路:没有用到product表,直接在sales表中使用聚合函数:1selectproduct_id,sum(quantity)astotal_quantity2fromsales3groupbyproduct_id;......
  • yum 安装Mysql
    1.yum源下载安装https://dev.mysql.com/downloads/repo/yum/yumlocalinstall-ymysql80-community-release-el7-7.noarch.rpmyumrepolistenabled|grep"mysql.*-community.*"修改/etc/yum.repos.d/mysql-community.repo[mysql57-community]enabled=12.安装mysqlyumin......
  • 力扣1068(MySQL)-产品销售分析Ⅰ(简单)
    题目:销售表 Sales: 产品表 Product:写一条SQL 查询语句获取Sales 表中所有产品对应的产品名称product_name以及该产品的所有售卖年份year 和价格price。查询结果中的顺序无特定要求。查询结果格式示例如下: 来源:力扣(LeetCode)链接:https://leetcode.cn/proble......
  • Mysql索引原理
    什么是索引索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,为了优化数据库查询效率,引入的数据结构,类似于书的目录索引的分类普通索引--创建索引的基本语法CREATEINDEXindexNameONtable(column(length));主键索引联合索引--......
  • MYSQL进阶之存储引擎
    1、概念存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方法。其基于表的,而不是基于库的,所以存储引擎也称为表类型。在建表的时候,不指定存储引擎,默认的存储引擎是InnoDB。查看建表语句:showcreatetable表名; 可看到默认的存储引擎就是InnoDB 在建表的时候,......
  • django中使用orm连接mysql,setting.py的设置
    默认使用的时sqllite数据库,我们需要改成mysql,只要需要填写相关信息即可。比如mysql的数据库名,用户名,密码,主机地址,端口等信息#Database#https://docs.djangoproject.com/en/4.1/ref/settings/#databases#DATABASES={#'default':{#'ENGINE':'django.db.b......
  • navicat 链接 mysql 2059-Authentication plugin 'caching_sha2_password' cannot be
      出现这个原因是mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password1、登录Mysql:mysql-uroot-p2、修改......
  • MySQL Others--select @@tx_read_only 执行频率较高问题
    问题描述MySQLJDBCDriver在5.1.36以下的版本且数据库版本大于5.6.5,在每次update/insert/delete请求时,均会向后端数据库发送select@@tx_read_only命令,判断下当前会话的事务是否是只读。MySQLJDBCDriver在5.1.36以上,如果使用execute()而不是executeUpdate()方......