牛客网sql练习题解(22-32)
文章目录
- 简介
- 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)相关推荐
- 牛客网sql练习题解(12-21)
文章目录 简介 NO.12 NO.13 NO.14 NO.15 NO.16 NO.17 NO.18 NO.19 NO.20 NO.21 简介 按时来更,感觉题目不是很难,不过我有一个感觉就是虽然题目简 ...
- 牛客网数据开发题库_牛客网SQL题库NO.32~40
不要问为什么没有31题,大概被牛客吞掉了吧,哈哈哈哈 SQL 32[简单] 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分 CREA ...
- 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库
牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...
- 牛客网SQL 进阶篇刷题
牛客网SQL 进阶篇刷题(1-19) 用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001,并在50分钟后提交,得了90分: 用户1002在2021年9月4日上午7点1分2秒开始 ...
- 牛客网SQL题目解析(答案+解析+理解)
本文记录了牛客网sql全部题目的答案与难题解析,部分题目包含多种解法,并且涵盖了开窗函数等各种语法点的理解 标题中高亮的题目,是易错题 牛客网刷题链接:牛客网sql在线练习 本文所有语句使用mysql ...
- 牛客网sql题库(1-30题)—— 个人答案与过程解析
本篇博客分享一下我在牛客网sql题库刷题时,自己敲出来的结果.结果均通过了牛客网的结果验证. 具体的题目就不放在博客中了,感兴趣可以自行去搜索牛客网,找到sql题库在线编程 每道题下面都有我自己写的题 ...
- 牛客网SQL刷题笔记(MySQL)
牛客网SQL刷题笔记(MySQL) 此博客集合LeetCode.牛客网常见的题型及其解法,侵删 目录 牛客网SQL刷题笔记(MySQL) 类型1:查找排名第几的数据 SQL2 查找入职员工时间排名倒数 ...
- sql里查询一个组和组的用户数怎么查?_【牛客网SQL刷题】留存率怎么算?
抽空刷了牛客网SQL实战72题,最后几道以牛客网为例的题目还挺有挑战性,在此记录 统计时间段新用户次日留存率 每日的次日留存率 每日的新用户数 每日新用户的次日留存 求新登录用户次日留存 表login ...
- 牛客网SQL实战二刷 | Day10
「牛客网SQL实战二刷」是个系列学习笔记博文,今天解析7道SQL题目- 第55 - 61题. 每篇笔记的格式大致为,三大板块: 大纲 题目(题目描述.思路.代码.相关参考资料/答疑) 回顾 ❤️「往期 ...
最新文章
- Centos7.2部署DHCP服务
- .NET : 动态生成工作流定义文件并且进行编译
- Ubuntu常用安装源
- 三大场景,对象存储OSS带你快速上云
- python软件菜单如何设计_佩服!我用Python设计了一个签名软件
- 互斥与同步——local_irq_enable与local_irq_disable
- jQuery slideToggler() 方法 -《狗嗨默示录》-
- ext拖动gridpanel的列组件消失_未来光伏组件市场格局:182mm市场占有率65%、210占5%、166占20%...
- 每日英语:Electronics Develop A Sixth Sense
- [Swift]LeetCode1009. 十进制整数的补码 | Complement of Base 10 Integer
- C# 获取打开的EXCEL中某列的行数
- js constructor 和 instanceof
- java do while 循环语句_Java do while循环语句用法
- 下拉框输入模糊查询_高考英语听力考试查询、网上填报志愿时间、诈骗陷阱提防!全在这里了...
- 像素游戏画法_点画法遇到像素化
- html5画布插入图片,html5画布导入图片
- Linux命令`ll`的各列什么意思
- Lake Shore定制探针台
- 学会学习3--选择恐惧症和收据控
- 鸡啄米:C++编程入门系列之五(运算符和表达式)
热门文章
- java打地鼠游戏教案,幼儿园打地鼠游戏教案
- 移动互联及大数据“路路拍”上线仪式——圆满成功
- Connection Timeout 问题排查
- mysql查询表可编辑器_数据库查看编辑工具(Exportizer)
- pyQT 弹簧(QSpacerItem)的功效
- 普通话测试软件字体怎么调整,普通话考试常见问题解答
- 阿里专家梁笑:2018双十一下单成功率99.9%!供应链服务平台如何迎接大促 1
- 微信中已停止访问该网页、据用户投诉及腾讯手机管家云网址检测、该网页包含不安全内容。为维护绿色上网环境,已停止访问的解决方案
- 设置控件评分星星控件
- Apache http Server与Tomcat整合 2