文章目录

  • 简介
  • NO.22
  • NO.23
  • NO.24
  • NO.25
  • NO.26
  • NO.27
  • NO.28
  • NO.29
  • NO.30
  • NO.31
  • NO.32

简介

往期文章:
牛客网sql练习题解 (1-11)
牛客网sql练习题解(12-21)
牛客网sql练习题解(22-32)
牛客网sql练习题解(34-42)

NO.22


这里面有一个小技巧即使怎么获得当前salary的排名,也就是子查询中的写法,这是一个比较常用的方法。值得记住。

select s.emp_no, s.salary, tmp.rank as rank
from salaries s inner join (select distinct s1.salary, count(distinct s2.salary) as rankfrom salaries s1, salaries s2where s1.to_date = '9999-01-01' and s2.to_date = '9999-01-01'and s1.salary <= s2.salarygroup by s1.salary
) as tmp
on s.salary = tmp.salary
where s.to_date = '9999-01-01'
order by s.salary desc, s.emp_no;

NO.23

select de.dept_no, de.emp_no, s.salary
from dept_emp de, salaries s, employees e
where de.emp_no = s.emp_no and s.emp_no = e.emp_no
and s.to_date = '9999-01-01' and s.emp_no not in (select emp_no from dept_managerwhere to_date = '9999-01-01'
);

NO.24

select de.emp_no,dm.emp_no as manager_no, s1.salary as emp_salary, s2.salary as manager_salary
from dept_emp de, dept_manager dm, salaries s1, salaries s2
where de.emp_no = s1.emp_no and de.dept_no = dm.dept_no and dm.emp_no = s2.emp_no and
s1.salary > s2.salary and
s1.to_date = '9999-01-01' and
s2.to_date = '9999-01-01';

NO.25


这里注意一下group by的连用吧,就是对多个col进行group by,注意加逗号啊

select d.dept_no, d.dept_name, t.title, count(*) as "count"
from departments d, dept_emp de, titles t
where d.dept_no = de.dept_no and de.emp_no = t.emp_no
and de.to_date = '9999-01-01'
and t.to_date = '9999-01-01'
group by d.dept_no, d.dept_name, t.title
order by d.dept_no;

NO.26

这道题的关键就是strftime函数的使用
strftime函数可以YYYY-MM-DD HH:MM:SS格式的日期字符串转换成其他形式的字符串。
strftime的语法是
strftime(格式,日期/时间, 修正符号、修正符号…)
还有我使用了cast函数,
用法是:
cast(col1 as 类型)
用于类型转化

select s1.emp_no, s2.from_date, (s2.salary - s1.salary) as salary_growth
from salaries s1, salaries s2
where s1.emp_no = s2.emp_no
and (cast(STRFTIME('%Y', s2.from_date) as tinyint) - cast(STRFTIME('%Y', s1.from_date) as tinyint) = 1 or cast(STRFTIME('%Y', s2.to_date) as tinyint) - cast(STRFTIME('%Y', s1.to_date) as tinyint) = 1)
and salary_growth > 5000
order by salary_growth desc;

NO.27

select c.name, count(fc.film_id)
from film f, category c, film_category fc
where f.description like '%robot%'and c.category_id = fc.category_id and fc.film_id = f.film_idand c.category_id in (select category_idfrom film_categorygroup by category_idhaving count(film_id) >= 5
)
group by c.category_id;

我觉得这一道题问的很模糊,反正我一开始写错了就是因为理解错了,这里注意一下like的用法吧,别的没什么重点。

NO.28


常规操作

select f.film_id, f.title
from film f
where f.film_id not in (select f1.film_idfrom film f1 join film_category fc1on f1.film_id = fc1.film_id
);

附赠一个方法二不用子查询:

select f.film_id, f.title
from film f left join film_category fc
on f.film_id = fc.film_id
where fc.category_id is NULL;

这里需要注意is NULL,可不是= NULL

NO.29


这题比较简单,唯一我觉得稍微注意一些的,把子查询放在where会比较好一些,当然放在from里面也没有错误。

select f.title, f.description
from film f inner join film_category fc
on f.film_id = fc.film_id
where fc.category_id in (select category_idfrom categorywhere name = 'Action'
);

NO.30

这题应该是系统有bug,至少我做的时候有bug,跳过。

NO.31

这题简单明了,我喜欢,就是考察一个知识点,就是字符串的连接。
这和数据库的版本和环境有关系,
MySql支持CONCAT方法:

select CONCAT(CONCAT(last_name, " "), first_name) as Name
-- select CONCAT(last_name," ",first_name) as name  from employees
from employees;

但是这是sqlite的环境:

select (last_name || " " || first_name) as Name
from employees;

NO.32


这怎么越做越回去呢??

create table actor(actor_id smallint(5) not null,first_name varchar(45) not null,last_name varchar(45) not null,last_update timestamp not null default (datetime('now', 'localtime')),primary key(actor_id)
);

简单记录,不喜勿喷
大家共勉~

牛客网sql练习题解(22-32)相关推荐

  1. 牛客网sql练习题解(12-21)

    文章目录 简介 NO.12 NO.13 NO.14 NO.15 NO.16 NO.17 NO.18 NO.19 NO.20 NO.21 简介 按时来更,感觉题目不是很难,不过我有一个感觉就是虽然题目简 ...

  2. 牛客网数据开发题库_牛客网SQL题库NO.32~40

    不要问为什么没有31题,大概被牛客吞掉了吧,哈哈哈哈 SQL 32[简单] 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分 CREA ...

  3. 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库

    牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...

  4. 牛客网SQL 进阶篇刷题

    牛客网SQL 进阶篇刷题(1-19) 用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001,并在50分钟后提交,得了90分: 用户1002在2021年9月4日上午7点1分2秒开始 ...

  5. 牛客网SQL题目解析(答案+解析+理解)

    本文记录了牛客网sql全部题目的答案与难题解析,部分题目包含多种解法,并且涵盖了开窗函数等各种语法点的理解 标题中高亮的题目,是易错题 牛客网刷题链接:牛客网sql在线练习 本文所有语句使用mysql ...

  6. 牛客网sql题库(1-30题)—— 个人答案与过程解析

    本篇博客分享一下我在牛客网sql题库刷题时,自己敲出来的结果.结果均通过了牛客网的结果验证. 具体的题目就不放在博客中了,感兴趣可以自行去搜索牛客网,找到sql题库在线编程 每道题下面都有我自己写的题 ...

  7. 牛客网SQL刷题笔记(MySQL)

    牛客网SQL刷题笔记(MySQL) 此博客集合LeetCode.牛客网常见的题型及其解法,侵删 目录 牛客网SQL刷题笔记(MySQL) 类型1:查找排名第几的数据 SQL2 查找入职员工时间排名倒数 ...

  8. sql里查询一个组和组的用户数怎么查?_【牛客网SQL刷题】留存率怎么算?

    抽空刷了牛客网SQL实战72题,最后几道以牛客网为例的题目还挺有挑战性,在此记录 统计时间段新用户次日留存率 每日的次日留存率 每日的新用户数 每日新用户的次日留存 求新登录用户次日留存 表login ...

  9. 牛客网SQL实战二刷 | Day10

    「牛客网SQL实战二刷」是个系列学习笔记博文,今天解析7道SQL题目- 第55 - 61题. 每篇笔记的格式大致为,三大板块: 大纲 题目(题目描述.思路.代码.相关参考资料/答疑) 回顾 ❤️「往期 ...

最新文章

  1. Centos7.2部署DHCP服务
  2. .NET : 动态生成工作流定义文件并且进行编译
  3. Ubuntu常用安装源
  4. 三大场景,对象存储OSS带你快速上云
  5. python软件菜单如何设计_佩服!我用Python设计了一个签名软件
  6. 互斥与同步——local_irq_enable与local_irq_disable
  7. jQuery slideToggler() 方法 -《狗嗨默示录》-
  8. ext拖动gridpanel的列组件消失_未来光伏组件市场格局:182mm市场占有率65%、210占5%、166占20%...
  9. 每日英语:Electronics Develop A Sixth Sense
  10. [Swift]LeetCode1009. 十进制整数的补码 | Complement of Base 10 Integer
  11. C# 获取打开的EXCEL中某列的行数
  12. js constructor 和 instanceof
  13. java do while 循环语句_Java do while循环语句用法
  14. 下拉框输入模糊查询_高考英语听力考试查询、网上填报志愿时间、诈骗陷阱提防!全在这里了...
  15. 像素游戏画法_点画法遇到像素化
  16. html5画布插入图片,html5画布导入图片
  17. Linux命令`ll`的各列什么意思
  18. Lake Shore定制探针台
  19. 学会学习3--选择恐惧症和收据控
  20. 鸡啄米:C++编程入门系列之五(运算符和表达式)

热门文章

  1. java打地鼠游戏教案,幼儿园打地鼠游戏教案
  2. 移动互联及大数据“路路拍”上线仪式——圆满成功
  3. Connection Timeout 问题排查
  4. mysql查询表可编辑器_数据库查看编辑工具(Exportizer)
  5. pyQT 弹簧(QSpacerItem)的功效
  6. 普通话测试软件字体怎么调整,普通话考试常见问题解答
  7. 阿里专家梁笑:2018双十一下单成功率99.9%!供应链服务平台如何迎接大促 1
  8. 微信中已停止访问该网页、据用户投诉及腾讯手机管家云网址检测、该网页包含不安全内容。为维护绿色上网环境,已停止访问的解决方案
  9. 设置控件评分星星控件
  10. Apache http Server与Tomcat整合 2