数据库题目汇总(下)

2023-11-05

第一题

QQ截图20210415202104

  1. 编写一个sql语句,查询每一个部门中薪水最高的职工,结果返回部门编号dno,薪水最高的职工工号eno和薪水salary,以dno升序排列。
select
  b.dno,
  a.eno,
  b.max_salary as salary
from
  employees as a,(
    select
      dno,
      max(salary) as max_salary
    from
      employees
    group by
      dno
  ) as b
where
  a.dno = b.dno
  and a.salary = b.max_salary
order by
  b.dno asc

第二题

QQ截图20210415202231

  1. 编写一个sql语句,找出年龄在35以上的并且在2020-09-01至2020-09-30期间没有预定红色(RED)船只的水手,结果返回水手姓名sname。
select
  s.sname
from
  sailors s
where
  s.age > 35
  and not exists(
    select
      *
    from
      reserves r,
      boats b
    where
      r.sid = s.sid
      and r.bid = b.bid
      and b.color = "RED"
      and r.reserve_date between '2020-09-01'
      and '2020-09-30'
  )
  1. 编写一个sql语句,找出2020-05-01至2020-05-31期间预定过绿色船(GREEN)的等级最高的水手,结果返回水手姓名sname。
select sname from(select
  s.sname,
  s.rating
from
  sailors s,
  reserves r,
  boats b
where
  r.sid = s.sid
  and r.bid = b.bid
  and b.color = "GREEN"
  and r.reserve_date between '2020-05-01'
  and '2020-05-31'
order by
  s.rating desc) as t1
limit
  1
  1. 编写一个sql语句,找出年龄在35岁以上,并且在2020-08-01至2020-08-31期间同时预定了红色船(RED)和绿色船(GREEN)的水手,结果返回水手姓名sname。
select
  sname
from(
    select
    distinct  s.sname
    from
      sailors s,
      reserves r,
      boats b
    where
      r.sid = s.sid
      and r.bid = b.bid
      and b.color = "GREEN"
      and r.reserve_date between '2020-08-01'
      and '2020-08-31'
      and s.age > 35
  ) as t1
where
  exists(
    select
    distinct  s.sname
    from
      sailors s,
      reserves r,
      boats b
    where
      r.sid = s.sid
      and r.bid = b.bid
      and b.color = "RED"
      and r.reserve_date between '2020-08-01'
      and '2020-08-31'
      and s.age > 35
  )

第三题

QQ截图20210415202522

  1. 编写一个sql语句,找出2020-08-01至2020-08-31期间订单数量最多的客户,数量相同时选择customer_id较小的用户,结果返回用户编号customer_id和购买数量order_num。
select
  customer_id,
  count(order_id) as order_num
from
  orders
where
  order_date between "2020-08-01"
  and "2020-08-31"
group by
  customer_id
order by
  count(*) desc
limit
  1
  1. 编写一个sql语句,找到每个用户最近三笔订单。若用户订单少于3笔,则返回该用户的全部订单,结果返回用户名customer_name,订单编号order_id和订单日期order_date,以custromer_name升序,order_date降序排列。
select
  name customer_name,
  order_id,
  order_date
from
  (
    select
      o1.customer_id,
      o1.order_id,
      o1.order_date,
      (
        select
          1 + count(*)
        from
          orders o7
        where
          o7.customer_id = o1.customer_id
          and o7.order_date > o1.order_date
      ) as rnk
    from
      orders o1
  ) t
  left join customers using(customer_id)
where
  rnk <= 3
order by
  name asc,
  order_date desc

第四题

QQ截图20210415202711

  1. 编写一个sql语句,查询参加比赛场次最多的选手,若参与比赛场次相同,选择用户编号player_id较小的选手,结果返回用户编号player_id和参与的比赛数量match_num。
select
  player_id,
  count(match_id) as match_num
from(
    select
      first_player as player_id,
      match_id
    from
      matches
    union all
    select
      second_player as player_id,
      match_id
    from
      matches
  ) as ps
group by
  player_id
order by
  match_num desc
limit
  1
  1. 编写一个sql语句,查找每组中的获胜者。每组的获胜者是在组内累积得分最高的选手。如果有得分相同的情况,则认为player_id 最小的选手获胜,结果返回组号group_id和选手编号player_id,以group_id升序排列。
select
  group_id,
  player_id
from(
    select
      p.group_id,
      p.player_id,
      sum(ps.score) as score
    from
      players as p
      inner join(
        select
          first_player as player_id,
          first_score as score
        from
          matches
        union all
        select
          second_player as player_id,
          second_score as score
        from
          matches
      ) as ps on p.player_id = ps.player_id
    group by
      player_id
    order by
      group_id,
      score desc,
      player_id
  ) as top_scores
group by
  group_id

第五题

QQ截图20210415202915

  1. 编写一个sql语句,查询每个用户的注册日期以及在2019年作为买家的订单总数,结果返回用户编号user_id,注册日期join_date和订单数量orders_in_2019,以user_id升序排列。
select
  u.user_id,
  join_date,
  count(o.order_id) as orders_in_2019
from
  users u
  left join orders o on u.user_id = o.buyer_id
  and year(o.order_date) = '2019'
group by
  u.user_id
  1. 编写一个sql语句,查询每一个用户按顺序卖出的第二件商品是否是他们最喜爱的品牌。结果返回卖家编号seller_id和是否是最喜爱品牌的情况if_fav_brand(取值为’yes’,‘no’,售出小于2件时返回 ‘no’),以seller_id升序排列。
select
  users.user_id as seller_id,
  if(
    O3.item_id is not null
    and users.favorite_brand = items.item_brand,
    'yes',
    'no'
  ) as 'if_fav_brand'
from
  users
  left join (
    select
      seller_id,(
        select
          item_id
        from
          orders O2
        where
          O2.seller_id = O1.seller_id
        order by
          order_date
        limit
          1, 1
      ) as item_id
    from
      orders O1
    group by
      seller_id
  ) O3 on users.user_id = O3.seller_id
  left join items on O3.item_id = items.item_id

第六题

QQ截图20210415203108

  1. 编写一个sql语句,查询每个月的通过率,结果返回月份mon及通过率accept_rate(不包括通过率为0的月份),以mon升序排列。
select
  a_m1.mon,
  a_m2.count2 / a_m1.count1 as accept_rate
from
  (
    select
      mon,
      count(*) as count1
    from(
        select
          distinct sender_id,
          send_to_id,
          month(request_date) as mon
        from
          friend_requests
      ) as t1
    group by
      mon
  ) as a_m1,(
    select
      mon,
      count(*) as count2
    from(
        select
          distinct requester_id,
          accepter_id,
          month(accept_date) as mon
        from
          accepted_requests
      ) as t1
    group by
      mon
  ) as a_m2
where
  a_m1.mon = a_m2.mon
  and a_m1.count1 / a_m2.count2 != 0
group by
  a_m1.mon asc
  1. 编写一个sql语句,找出拥有最多的好友的用户以及他拥有的好友数目,好友数相同时选择user_id较小的用户,结果返回用户编号user_id和好友数目friend_num。
select
  user_id,
  count(*) friend_num
from
  (
    select
      requester_id user_id
    from
      accepted_requests
    union all
    select
      accepter_id user_id
    from
      accepted_requests
  ) as t1
group by
  user_id
order by
  friend_num desc
limit
  1;

第七题

QQ截图20210415203358

  1. 编写一个sql语句,查询新登录用户的留存率,即新用户第1天登陆之后,第2天再次登陆的概率,结果返回留存率rate。
select
  round(
    count(distinct user_id) * 1.0 /(
      select
        count(distinct user_id)
      from
        logins
    ),
    3
  ) as rate
from
  logins
where
  (user_id, login_date) in (
    select
      user_id,
      DATE_ADD(min(login_date), INTERVAL 1 DAY)
    from
      logins
    group by
      user_id
  );
  1. 编写一个sql语句,查询登录新用户个数不少于2个的日期,结果返回日期login_date和登录新用户个数new_user_num,以login_date升序排序。
select
  t1.login_date,
  count(t2.user_id) as new_user_num
from
  (
    select
      distinct login_date
    from
      logins
  ) t1
  left join (
    select
      user_id,
      min(login_date) first_date
    from
      logins
    group by
      user_id
  ) t2 on t1.login_date = t2.first_date
group by
  t1.login_date
having
  new_user_num >= 2
order by
  t1.login_date asc
  1. 编写一个sql语句,查询每个日期新用户次日留存率(包括留存率为0的日期),即该日登录的新用户第二日仍然登录的概率,返回日期date和留存率rate,保留小数点后3位,以date升序排列。
select
  t1.login_date as date,
  round(
    count(distinct logins.user_id) / count(t1.user_id),
    3
  ) as rate
from
  (
    select
      user_id,
      min(login_date) as login_date
    from
      logins
    group by
      user_id
  ) as t1
  left join logins on logins.user_id = t1.user_id
  and logins.login_date = DATE_ADD(t1.login_date, INTERVAL 1 DAY)
group by
  t1.login_date
union
select
  login_date as date,
  0.000 as rate
from
  logins
where
  login_date not in(
    select
      min(login_date)
    from
      logins
    group by
      user_id
  )
order by
  date

第八题

QQ截图20210415203603

  1. 编写一个sql语句,获取各个部门第二高的薪水,结果返回部门名称department,员工姓名name和工资salary,以department升序排列。
select
  d.department_name as department,
  e.name,
  e.salary
from
  employees e,
  departments d
where
  e.department_id = d.department_id
  and salary = IFNULL(
    (
      select
        distinct e1.salary
      from
        employees as e1
      where
        e.department_id = e1.department_id
      order by
        e1.salary desc
      limit
        1, 1
    ), 0
  )
order by
  department
  1. 编写一个sql语句,找出每个部门获得前三高工资的所有员工,结果返回部门名称department,员工姓名name和工资salary,以department升序,salary降序排列。
select
  d.department_name as department,
  e1.name as name,
  e1.salary
from
  employees e1
  join departments d on e1.department_id = d.department_id
where
  3 > (
    select
      count(distinct e2.salary)
    from
      employees e2
    where
      e2.salary > e1.salary
      and e1.department_id = e2.department_id
  )
order by
  department asc,
  e1.salary desc

第九题

QQ截图20210415203915

  1. 求拥有发票数大于1的用户的联系人名字及电子邮件。结果字段:user_id,contact_name,contact_email
select
  contacts.user_id,
  contacts.contact_name,
  contacts.contact_email
from
  contacts,(
    select
      user_id
    from
      invoices
    group by
      user_id
    having
      count(invoice_id) > 1
  ) as t1
where
  contacts.user_id = t1.user_id
  1. 为每张发票编写一个SQL查询,结果字段包含:invoice_id,customer_name,price,contacts_cnt(该顾客的联系人数量),trusted_contacts_cnt(可信联系人的数量)。查询的结果按照 invoice_id 排序。
select
  invoices.invoice_id,
  t1.customer_name,
  invoices.price,
  count(contacts.user_id) as contacts_cnt,
  count(t2.email) as trusted_contacts_cnt
from
  invoices
  join customers t1 on invoices.user_id = t1.customer_id
  left join contacts on t1.customer_id = contacts.user_id
  left join customers t2 on contacts.contact_email = t2.email
group by
  invoices.invoice_id

第十题

QQ截图20210415204102

  1. 查询各科成绩最高分,最低分,不及格率,中等率和优秀率。结果字段包含:c_id,c_name,max_score,min_score,‘不及格率’,‘中等率’和’优秀率’(及格率、中等率和优秀率结果在0到1之间,保留两位小数)。注:不及格<60,中等>=60且<90,优秀>=90。
select t1.c_id,courses.c_name,t1.max_score,t1.min_score,t1.不及格率 as '不及格率',t1.中等率 as '中等率',t1.优秀率 as '优秀率' from courses,(select c_id,max(s_score) as max_score,min(s_score) as min_score,round((sum(case when s_score < 60 then 1 else 0 end)/ count(*)),2) as 不及格率,round((sum(case when s_score >= 60 and s_score <90 then 1 else 0 end)/ count(*)),2) as 中等率,round((sum(case when s_score >= 90 then 1 else 0 end)/ count(*)),2) as 优秀率 from scores group by c_id) as t1 where t1.c_id=courses.c_id
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库题目汇总(下) 的相关文章

随机推荐

  • 虚拟机中克隆系统后无法联网?快速定位原因,原来问题出在这里

    在实际应用中 我们通常会在虚拟机中创建多个虚拟电脑 每次都新建电脑安装系统 这样的操作会比较繁琐 虚拟机中提供了系统克隆的功能 使得我们在创建好的虚拟电脑的基础上快速的创建一个新的虚拟电脑 极大的方便了我们的使用 VirtualBox虚拟机
  • 10行代码创造一个像素,图形学版本的hello world

    10行代码创造一个像素 图形学版本的hello world 任何的图片 视频 音乐其本质都是数据 当我们要生成一张图片时 只需要将数据写入文件 仅此而已 以ppm格式图片为例 上图为维基百科的ppm格式说明 按照上图格式将数据写入到文件中
  • 树莓派+NCS2运行yolov4

    上一篇在树莓派上搭建好了Openvino的环境 现在在此环境上运行yolov4 流程 Tensorflow模型 先将权重文件 weight转化为 pb文件 然后再转化为IR模型的 bin和 xml文件 最后部署到神经计算棒NCS2运行 Py
  • Ultra-Fast-Lane-Detection 论文笔记

    大佬的论文 https arxiv org abs 2004 11757v4 大佬的代码在大佬论文里讲了 下面的翻译笔记我们是指大佬
  • Git分布式版本控制系统

    摘要 Git管理挖掘图 较为全面的查看Git的工作流程 由于网页显示限制 建议下载放大查看 Git 常用命令 Git 是一个很强大的分布式版本控制系统 它不但适用于管理大型开源软件的源代码 管理私人的文档和源代码也有很多优势 Git常用操作
  • 大数据架构:Kafka

    Kafka 是一个高吞吐 分布式 基于发布订阅的消息系统 利用Kafka技术可在廉价PC Server上搭建起大规模消息系统 Kafka具有消息持久化 高吞吐 分布式 多客户端支持 实时等特性 适用于离线和在线的消息消费 KAFKA 分布式
  • 服务器环境搭建——安装mysql

    环境 操作系统 64位的Centos7 6 mysql 8 0 25 步骤 下载rpm并上传到服务器 去官网下载对应操作系统的rpm包 我是centos7 选择第二个 当然有了链接也可以使用wget指令 避免上传的步骤 安装RPM安装包 y
  • ZABBIX实践(一) 服务端部署和安装

    zabbix 一款非常强大的监控软件 不仅可以基于SNMP监控各种网络设备 而且还可以监控linux win等各版本操作系统的状态 1 本次实践的目标 1 搭建服务端和agent 实现监控 2 摸索对于VMWare的监控 2 安装环境 se
  • Java代码重构的几种模式

    主要来源 面向对象设计原理与模式 Java版 Object Oriented Design Using Java Written by Dale Skrien Java代码的重构模式主要有三种 重命名方法重构模式 引入解释性变量重构模式 以
  • Vue项目中处理key=value格式的数据-案例

    返回值 qrCode expiredAt 1693821779265 token 449d599830b8486a9c7b15e0bc3f036c listenUri wss ws abcdtest link token0 f63c6488
  • SpringBoot Datahub DatahubException InjectionManagerFactory not found 暨 datahub中可能遇到的问题及解法

    产生原因 依赖使用的是 compile group com aliyun datahub name aliyun sdk datahub version 2 12 0 public 然后和之前自己加的包依赖产生冲突 看了下是sf4j log
  • matlab中eig用法,MATLAB中eig的用法

    在MATLAB中 计算矩阵A的特征值和特征向量的函数是eig A 常用的调用格式有 5种 1 E eig A 求矩阵A的全部特征值 构成向量E 2 V D eig A 求矩阵A的全部特征值 构成对角阵D 并求A的特征向量构成 V的列向量 3
  • Git提交指定文件

    Git提交指定文件步骤 1 git status 查看修改的所有内容 或者git status s 2 git add 引号中间放上文件名 执行上一步后 会显示文件名跟目录 3 git stash u k 忽略其他文件 很重要的一步 4 g
  • Div 高度、滚动条距 Div 顶部偏移量、Div 中文档总高度

    版权声明 分享是一种品质 开源是一种精神 https blog csdn net wangmx1993328 article details 84560051
  • 【ABviewer从零开始教学查看器篇③】打开文件之缩略图菜单

    ABViewer是一款高质量 高效率 低成本的多功能设计及工程文档管理工具 能为您提供全面的专业的浏览及编辑功能 同时支持30多种光栅和矢量图形格式 在小编看来 ABViewer是一款非常简单且实用的CAD文档查看与编辑器 对于使用小白可能
  • 【图像处理】MATLAB:亮度变换

    亮度变换 函数imadjust f imread breast digital Xray tif g1 imadjust f 0 1 1 0 阴暗反转图像 负片图像 等同于 g1 imcomplement f g2 imadjust f 0
  • 服务器重启后,Tomcat首页可以访问,具体项目访问不了,报Lifecycle error.Unable to connect to Redis server: /localhost:6379

    10 47 18 main ERROR standard Lifecycle error Unable to connect to Redis server localhost 6379 com fr third org redisson
  • uniapp图片上传

    首先 在页面中创建一个按钮 并绑定点击事件 用于选择图片
  • 手把手搭建k8s集群

    目录 集群机器配置 1 安装Docker 1 1 安装persistent data 和 lvm2 1 2 修改docker安装源以及安装docker 1 3 启动docker 1 4 切换docker镜像源 2 安装k8s 2 1 安装v
  • 数据库题目汇总(下)

    文章目录 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 第九题 第十题 第一题 编写一个sql语句 查询每一个部门中薪水最高的职工 结果返回部门编号dno 薪水最高的职工工号eno和薪水salary 以dno升序排列 se