首页 > 数据库 >sql面试题目

sql面试题目

时间:2023-04-01 20:32:09浏览次数:49  
标签:product ods 题目 start sql sales 面试 year end

sql面试题目_sql

sql面试题目_sql_02

sql面试题目_sql_03

sql面试题目_sql_04

sql逻辑:

create table ods.product(product_id int,product_name varchar(255))ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
insert into ods.product values(1,'LC Phone');
insert into ods.product values(2,'LC T-Shirt');
select * from ods.product;
create table ods.sales(product_id int,product_start date,product_end date,average_daily_sales int)ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

insert into ods.sales values(1,'2019-01-25','2019-02-20',100);
insert into ods.sales values(2,'2018-12-01','2020-01-01',10);
insert into ods.sales values(3,'2019-12-01','2020-01-31',1);

select a.* from 
(select product_id,case when(year(product_start)=year(product_end) ) then year(product_start)
 when(year(product_end) =year(product_start)+1 ) then year(product_start) 
 when(year(product_end) =year(product_start)+2) then year(product_start) end as report_year,case when(year(product_end) =year(product_start)+1 ) or (year(product_end) =year(product_start)+2) then (TO_DAYS(CONCAT(year(product_start),'-12-31'))-TO_DAYS(product_start)+1)*average_daily_sales 
  when(year(product_start)=year(product_end) ) then ((TO_DAYS(product_end)-TO_DAYS(product_start)+1)*average_daily_sales)
 end as total_amount from ods.sales
union all
select product_id,case when(year(product_end)=year(product_start)+1 ) then year(product_start)+1 
when(year(product_end) =year(product_start)+2) then year(product_start)+2 end as report_year,case when(year(product_end)=year(product_start)+1 ) or (year(product_end) =year(product_start)+2) then DAYOFYEAR(product_end)*average_daily_sales  end as total_amount from ods.sales where 
year(product_end) != year(product_start)
union all
select product_id,case when(year(product_end) =year(product_start)+2) then year(product_start)+1 end as report_year, case when(year(product_end) =year(product_start)+2) then 365*average_daily_sales end as total_amount  from ods.sales where year(product_end) >=year(product_start)+2)a group by a.product_id,a.report_year,a.total_amount order by a.product_id ;

sql面试题目_sql_05

这道题在当时面试时,我没有做出来,花了将近1小时的时间。


标签:product,ods,题目,start,sql,sales,面试,year,end
From: https://blog.51cto.com/u_15345945/6163684

相关文章

  • Linux服务器MySQL操作总结
    目录1.Navicat连接服务器MySQL2.如何查看MySQL用户名和密码3.修改MySQL的登录密码4.安装MySQL开发包(Centos7版)错误:error1045(28000):accessdeniedforuser'root'@'localhost'(usingpassword:yes)1.Navicat连接服务器MySQL1.选择数据库直接使用第一个MySQL即可......
  • Sql server 查看那个表占用的空间最多
    要查看SQLServer中哪个表占用的空间最多,您可以使用以下查询来列出所有表及其占用的空间大小,并按照占用空间从大到小进行排序: SELECTt.NAMEASTableName,p.rowsASRowCounts,SUM(a.total_pages)*8ASTotalSpaceKB,SUM(a.used_pages)*8ASUsed......
  • sql server 收缩日志文件
    在SQLServer中,可以使用DBCCSHRINKFILE命令来收缩数据库的事务日志文件。下面是一个示例:USE<database_name>GO--收缩日志文件DBCCSHRINKFILE(<log_file_name>,<target_size_in_MB>)其中,<database_name>是要操作的数据库名称,<log_file_name>是要收缩的事......
  • 别逛了,送你一份2023年Java核心篇JVM(虚拟机)面试题整理
    Java内存区域说一下JVM的主要组成部分及其作用?JVM包含两个子系统和两个组件,两个子系统为Classloader(类装载)、Executionengine(执行引擎);两个组件为Runtimedataarea(运行时数据区)、NativeInterface(本地接口)。●Classloader(类装载):根据给定的全限定名类名(如:java.......
  • Linux下编译Sqlite源码
    1.下载wgethttps://www.sqlite.org/2023/sqlite-autoconf-3410200.tar.gz--no-check-certificate2.解压tarzxvfsqlite-autoconf-3410200.tar.gz 3.配置路径cdsqlite-autoconf-3410200/./configure--prefix=/data/sqlite#先建立该路径 4.编译make&&ma......
  • 面试笔记-Docker(Ⅱ)
    上篇文章已经成功build了image并且创建了container运行成功,我们现在进行接下来的工作目录挂载使用Docker运行后,我们改了项目代码不会立刻生效,需要重新build和run,很是麻烦。容器里面产生的数据,例如log文件,数据库备份文件,容器删除后就丢失了。......
  • PostgreSQL 13 pacemaker 高可用集群
    环境介绍 操作系统版本CentOSLinuxrelease7.8.2003(Core)  数据库版本psql(13.10)  PCS集群版本[root@hd-clw-select-proxysql01~]# rpm-qa|greppacemakerpacemaker-libs-1.1.23-1.el7_9.1.x86_64pacemaker-cli-1.1.23-1.el7_9.1.x86_64pacemaker-1.1.2......
  • 面试题
    目录可变类型与不可变类型常用的魔法方法类中的装饰器双写一致性断点续传内网穿透缓存击穿http与https数据库如何处理的?用过什么云产品看看数据库celery多线程mysql1千万w,性别字段(男女),查询时候,这个字段要不要加索引实现踢下线实现黑名单功能深浅拷贝是什么魔法方法new和init有什......
  • PgSQL常用操作
    1、重置表索引REINDEXINDEXindex_name;//重置单个索引REINDEXTABLEtable_name;//重置整个表的索引2、查询父表的分区表selectc.relnamefrompg_classcjoinpg_inheritspionpi.inhrelid=c.oidjoinpg_classc2onc2.oid=pi.inhparentwherec2.relname='父表名'......
  • 面试笔记-Docker(Ⅰ)
    打包写好的项目基础配置安装指定版本的node.jsdockerpullnode:18.15运行刚才pull到的镜像,即创建一个containerdockerrun-itd--namenode-testnode:18.15-i:表示以交互模式运行容器(让容器的标准输入保持打开)-d:表示后台运行容器,并返回容器ID-t:为容器重新分配一个伪......