Sql练习题总结持续更新

SQL从入门到熟练——Mysql版SQL练习题及答案(持续更新中) 数据表创建 # 创建 test 数据库 mysql> create database test; Query OK, 1 row affected (0.01 sec) mysql> use test; Database changed 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values( 阅读详情

Sql练习题总结

1.求公交线

1.数据


1 0 1 四惠
1 0 2 天通苑
1 0 3 立水桥
1 1 1 立水桥
1 1 2 天通苑
1 1 3 四惠
2 0 1 A
2 0 2 B
2 0 3 C
2 1 1 C
2 1 2 B
2 1 3 A


2.见表语句

create table busLog(
    line int  COMMENT '线路',     
    direction int COMMENT '方向',
    sNumb int   COMMENT '站牌号',
     name String COMMENT '站名'
) row format delimited fields terminated by '\t';

3.期望结果

line(线路) 上首 上末 下首 下末
1 四惠 立水桥 立水桥 四惠
2 A C C A

4.执行语句

目前想到这样, 有好的思路分享下!!

select
t2.line,
CONCAT_WS('' ,collect_set(t2.ss)),
CONCAT_WS('' ,collect_set(t2.sm)),
CONCAT_WS('' ,collect_set(t2.xs)),
CONCAT_WS('' ,collect_set(t2.xm))
from(
select  t1.line,
    if(t1.direction==0 and flag2 is null,t1.name,null) as ss,
    if(t1.direction==0 and flag1 is null,t1.name,null) as sm,
    if(t1.direction==1 and flag2 is null,t1.name,null) as xs,
    if(t1.direction==1 and flag1 is null,t1.name,null) as xm from (
select line,
         direction, 
         snumb,
         name,
         lag(snumb,1) over(partition by line,direction order by snumb desc) as flag1,
         lag(snumb,1) over(partition by line,direction order by snumb ) as flag2 from busLog
)t1
    )t2
group by t2.line

方法二:

select line,a,b,c,d from (
select line ,FIRST_VALUE(start) over(partition by line) a,FIRST_VALUE(endl) over(partition by line) b,FIRST_VALUE(start2) over(partition by line) c,FIRST_VALUE(end2) over(partition by line) d
from (
select line,start,endl,start2,end2 from (
select   line,
         FIRST_VALUE(name) over(partition by line,direction order by snumb ) as start,
         last_VALUE(name) over(partition by line,direction order by snumb rows between unbounded preceding and unbounded following) as endl,
         FIRST_VALUE(name) over(partition by line,direction order by snumb desc) as start2,
         last_VALUE(name) over(partition by line,direction order by snumb desc rows between unbounded preceding and unbounded following ) as end2
 from busLog
) t1
group by line ,start,endl,start2,end2
) t2
) t3
group by line,a,b,c,d
;

2.时间区间拆分成单独行

  • ​ 知识点:

    • posexplode: 可以返回爆炸得到的数值,和其数组的索引
    • space函数,space(n),返回n个空格
    • date_add(date1,int days ) date1加上 days天数
    • date_diff (date1,date2) 获得相差的天数
  • 建表

    create table time_test(
            id int,
            start_date date,
            end_date date)
    row format delimited fields terminated by '\t'
    

    插入数据

    insert into time_test(id,start_date,end_date) values(1,'2019-11-1','2019-12-1')
    

    想要结果:

查询语句:

select id,start_date,end_date,tf.pos,tf.val,date_add(start_date,pos)
    from  time_test
lateral view posexplode(split(space(datediff(end_date,start_date)),' ')) tf as pos,val

3.求5分钟内分数增长超过50的学生

创建表:

create table score_test(
    id int,
    time String,
    score double)
row format delimited fields terminated by '\t'

数据:

1 2020-02-02 11:25:31 60
1 2020-02-02 11:26:31 70
1 2020-02-02 11:27:31 80
1 2020-02-02 11:30:31 120
2 2020-02-02 11:25:31 50
2 2020-02-02 11:29:29 120
查询语句

select distinct id 
from (
    select id,
            dt,
            hour,
            min_stage,
            max(score)-min(score) dif_score,
            if(max(score)-min(score)>=50,'异常','正常') status 
    from (
        select id, 
                date_format(time,'yyyy-MM-dd') dt,
                hour(time) hour,
                floor(minute(time)/5) min_stage,
                score 
            from score_test
        ) t1
    group by id,dt,hour,min_stage
) t2
where t2.dif_score >=50
;

知识点:

五分钟内: 用分钟数 /5 取整,那么时间在五分钟的数据是一样的 (标记为范围)

然后 ,按学生,时间,范围 分组,取出最大成绩和最小成绩 相减

4.关于学生成绩的SQL

  • 加载数据
load data local inpath '/export/data/hivedatas/student.txt' into table student;

load data local inpath '/export/data/hivedatas/course.txt' into table course;

load data local inpath '/export/data/hivedatas/teacher.txt' into table teacher;

load data local inpath '/export/data/hivedatas/score.txt' into table score;
  • 创建表格:

    create table student(s_id string,s_name string,s_birth string,s_sex string) row format delimited fields terminated by '\t';
    
    

    01 赵雷 1990-01-01 男
    02 钱电 1990-12-21 男
    03 孙风 1990-05-20 男
    04 李云 1990-08-06 男
    05 周梅 1991-12-01 女
    06 吴兰 1992-03-01 女
    07 郑竹 1989-07-01 女
    08 王菊 1990-01-20 女

create table course(c_id string,c_name string,t_id string) row format delimited fields terminated by '\t';

01 语文 02
02 数学 01
03 英语 03

create table teacher(t_id string,t_name string) row format delimited fields terminated by '\t';

01 张三
02 李四
03 王五

create table score(s_id string,c_id string,s_score int) row format delimited fields terminated by '\t';

01 01 80
01 02 90
01 03 99
02 01 70
02 02 60
02 03 80
03 01 80
03 02 80
03 03 80
04 01 50
04 02 30
04 03 20
05 01 76
05 02 87
06 01 31
06 03 34
07 02 89
07 03 98
1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数:
答案:

select s.*,a.s_score as 01_score,b.s_score as 02_score
from student s
join score a 
on s.s_id =a.s_id and a.c_id="01"
left join  score b 
on s.s_id =b.s_id and b.c_id="02"
where a.s_score> b.s_score

– 2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数:

select s.*,a.s_score as 01_score,b.s_score as 02_score
from student s
join score a 
on s.s_id =a.s_id and a.c_id="01"
left join  score b 
on s.s_id =b.s_id and b.c_id="02"
where a.s_score < b.s_score

– 3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩:

-- 我的答案:
select s.s_id,s.s_name,t1.avg_score
from student s 
inner join (
select s_id,avg(s_score) as avg_score
FROM score
group by s_id
having avg_score>=60
) t1 
on s.s_id=t1.s_id
-- 资料答案:
select  student.s_id,student.s_name,tmp.avg_score from student
  join (
    select score.s_id,round(avg(score.s_score),1)as avg_score
        from score group by s_id)as tmp
  on tmp.avg_score>=60
where student.s_id = tmp.s_id
-- 资料答案2:
select  student.s_id,student.s_name,round(avg (score.s_score),1) as 平均成绩 from student
join score on student.s_id = score.s_id
group by student.s_id,student.s_name
having avg (score.s_score) >= 60;

– 4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩:
– (包括有成绩的和无成绩的)

select s.s_id,s.s_name,t1.avg_score
from student s 
inner  join (
select s_id,avg(s_score) as avg_score
FROM score
group by s_id
having avg_score<60
) t1 
on s.s_id=t1.s_id
union all
select s2.s_id, s2.s_name, 0 as avg_score
from student s2
where s2.s_id  not in (select distinct sc2.s_id from score sc2);

– 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩:

-- 我的答案:
select s.s_id,s.s_name,t1.c_idCount,t1.sum_score
from student s
left join
(select s_id,count(c_id) as c_idCount,sum(s_score) as sum_score
FROM score
group by s_id
) t1
-- 资料答案:
select s.s_id,s.s_name,count(sc.c_id) as cc_cid,round(sum(sc.s_score),1) as sum_score
from student s
left join score sc
on s.s_id =sc.s_id
group by s.s_id,s.s_name

– 6、查询"李"姓老师的数量:

select teacher.t_name
from teacher 
where teacher.t_name like '李%' group by t_name ;

– 7、查询学过"张三"老师授课的同学的信息:

-- 我的答案:
select s.*
from student s
left join  score sc
on  s.s_id = sc.s_id
left join course c
on sc.c_id= c.c_id
left join teacher t
on c.t_id = t.t_id
where t.t_name="张三"
-- 资料答案:
select student.* from student
join score on student.s_id =score.s_id
join  course on course.c_id=score.c_id
join  teacher on course.t_id=teacher.t_id and t_name='张三';

9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息:
并且 可以用inner join

select * from student
inner join (select s_id from score where c_id=01)tmp1
on student.s_id=tmp1.s_id
			inner join (select s_id from score where c_id=02)tmp2
on student.s_id=tmp2.s_id

10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息:

select * from student
inner join (select s_id from score where c_id=01)tmp1
on student.s_id=tmp1.s_id
left join (select s_id from score where c_id=02)tmp2
on student.s_id=tmp2.s_id
where tmp2.s_id is  null ;

– 11、查询没有学全所有课程的同学的信息:

select * from student s
join  (select count(1) as num1 from course) tmp1
left join (select s_id,count(1) as num2 from score 
group by  score.s_id) t1
on s.s_id = t1.s_id  and tmp1.num1 =t1.num2
where t1.s_id is null

udent.s_id=tmp1.s_id
left join (select s_id from score where c_id=02)tmp2
on student.s_id=tmp2.s_id
where tmp2.s_id is null ;


– 11、查询没有学全所有课程的同学的信息:

```sql
select * from student s
join  (select count(1) as num1 from course) tmp1
left join (select s_id,count(1) as num2 from score 
group by  score.s_id) t1
on s.s_id = t1.s_id  and tmp1.num1 =t1.num2
where t1.s_id is null
  • 12.求一个单词中有多少’l’字符
select 'l', length(charCount.word)-length(regexp_replace(charCount.word,'[l]','')) from charCount;
pandas与sql 对比,持续更新... 欢迎来到诸葛老刘的博客 由于工作关系 , 经常会用到sql和python的pandas模块,两者有很多相似之处,我将整理出系列的对比文章,并保持更新. 若有不尽之处,敬请指出. 基础说明 本文代码环境基于windows 10 和 anaconda3创建的.python3.6虚拟环境 - 下表的名字,在sql中数据叫table, 在pandas中叫df, 在一般的df中id这个字符是不... 阅读详情

相关推荐

实战!在 AMD RX 9070 XT (16G) 上使用原生 Windows ROCm 7.1 部署 ComfyUI + Z-Image-Turbo

本文详细介绍了如何在Windows系统下为AMD Radeon RX 9070 XT显卡配置Z-Image-Turbo AI绘图环境。主要内容包括:安装VS Build Tools和最新显卡驱动,配置Conda Python 3.12环境,安装ROCm 7.1.1 SDK及PyTorch适配版本,部署ComfyUI可视化界面。重点解决了AMD显卡在AI绘图中的适配问题,通过--use-split-cross-attention参数优化显存使用,最终成功搭建了可在消费级16G显存设备上运行的AI绘图环境

qq_33614778的博客 4693

05-数据库_数据库高级_SQL进阶练习(部分习题)

三,表联结 1,where与join的用法 1.1 使用where进行表联结 如果数据存储在多个表中,怎样⽤单条SELECT语句检索出数据? 答案是使⽤联结。简单地说,联结是⼀种机制,⽤来在⼀条SELECT语句中关联表,因此称之为联结。 使⽤特殊的语法,可以联结多个表返回⼀组输出,联结在运⾏时关联表中正确的⾏。 例如:我们需要查询出所有的商品及对应的供应商信息怎么办? select vend_name,prod_name,prod_price from vendors,products

&再见萤火虫&的博客 2461

一个三极管和稳压管构成的简易稳压电源

一、对电压精度要求不高的场所可以使用本文中所述的简易稳压电源(电流变化引起 的基极-发射极的压降 变化 对输出电压来说可以容忍)二、根据负载实际需求选择三极管,不同的三极管集电极电流不同,电流放大倍数不同(1、尽量选择负载电流(iC 或 iE)上限时,hFE仍然比较理想的三极管,2、一般三极管对基极电流没有限制,可以适当调整基极电流以获得所需输出电流)

五花带点肉 1万+

sql50道题及答案详解

创建表语句 create table Student(sid varchar(10),sname varchar(10),sage datetime,ssex nvarchar(10)); insert into Student values('01' , '赵雷' , '1990-01-01' , '男'); insert into Student values('02' , '钱电' ,...

xiushuiguande的博客 4万+

SAP传输请求全流程详解:从SE10创建到STMS跨环境部署(附常见错误排查)

本文详细解析了SAP传输请求的全流程,从SE10创建到STMS跨环境部署,并提供了常见错误排查方法。涵盖工作台请求、定制请求等类型,以及STMS传输原理和实战操作技巧,帮助用户高效管理SAP系统变更。

weixin_29214335的博客 143

学习Ultralytics (下载)

Ultralytics由创立,最初是为了简化目标检测模型的开发和应用,专注于构建高效、易用、性能卓越的深度学习框架。其主要产品之一是 YOLO 系列模型,尤其是最新的YOLOv5和YOLOv8,因其在精度、速度和可扩展性方面的出色表现而广受欢迎。

2301_76846375的博客 2865

pg 9.3 新关键字 lateral 的用法.

SQL 2003 标准 里有提到 lateral 关键字. PG 数据库 在9.3 中引入了这个关键字, 他的用途就是可以在子查询中 跟外面的表实现关联. 例如...

cudi7618的博客 1125

Spring AI 实战:第二章、Spring AI提示词之玩转AI占卜的艺术

引言:程序员的神秘学探索引言:程序员的神秘学探索“下个迭代能按时发布吗?“这次晋升机会有多大?“我写的代码为什么总在半夜出bug?作为一名开发者是否也曾被这些略带玄学问题困扰?那让我们用Spring AI和提示词工程打造一个专属于程序员的"赛博占卜师",让大师来为你占卜一卦吧~一、提示词工程 - 与AI对话的艺术1.1 提示词工程是什么类比一下,AI就像一位刚从名校毕业的高材生它知识渊博但缺乏经验能解决复杂问题但需要明确指引有时会"过度脑补"(专业术语叫"幻觉")

liaokailin的专栏 1851

lateral函数oracle,PL/SQL Challenge 每日一题:2019-4-1 Lateral inline view(12C)

(原发表于 2019-2-28)最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。每两周的优胜者可获得itpub奖励的技术图书一本。以往旧题索引:http://www.itpub.net/forum.php?m ... eid&typeid=1808原始出处:http://www.plsqlchal...

weixin_34701481的博客 368

cannot import name ‘BUFSIZE‘ from ‘numpy‘ 解决方案

本文主要介绍了cannot import name ‘BUFSIZE’ from ‘numpy’ 解决方案,希望能对使用numpy的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 22万+

基于未来出行解决方案的场景实例:城市空中交通(UAM)的飞行路径规划与避障

本文介绍了使用Simulink进行城市空中交通(UAM)飞行路径规划与避障的仿真方法。主要内容包括:1)UAM系统架构与核心挑战;2)详细建模步骤,从城市3D环境构建到飞行器动力学模拟;3)全局路径规划(A*/RRT*)和局部避障(DWA/APF)算法实现;4)多机协同与冲突解决;5)关键场景仿真与性能评估;6)高级功能拓展方向。通过Simulink的数字孪生系统,可有效验证UAM在复杂城市环境中的可行性,为未来立体交通发展提供技术支撑。

xiaoheshang_123的博客 257

SQL练习题(4),持续更新中

声明:所有题目均是百度搜索,再由自己整理出来的,并非自己出的题。 1. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名 name course score 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 ......

如果没有梦想,那跟咸鱼有什么分别 1345

《AI Coding手册:Claude Code、OpenAI Codex、OpenClaw深度解析与实战指南》

AI编码技术经历了从简单规则匹配到深度神经网络,再到当前智能体(Agent)架构的范式转变。第一阶段:静态代码补全(2010-2018)早期工具如IntelliSense、Emmet基于语法分析和固定模板提供代码提示。这类系统依赖预定义规则,缺乏语义理解能力,仅能处理局部代码片段。第二阶段:统计语言模型(2018-2020)以GPT-2、TabNine为代表,引入基于大规模代码训练的神经语言模型。

AI天才研究院 1033

50道SQL练习题(持续更新中)

50道SQL练习

javaambition的博客 430

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

hive sql练习题(想起来就随便找几道HQL练习练习,持续更新)

hive sql练习题(想起来就随便找几道HQL练习练习,持续更新)

weixin_45937224的博客 636

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

想学习T-SQL语句的小伙伴进

1.自学T-SQl语句从这里进 前面是各个知识点的细致讲解,后面是相关的练习题目 通过这个网站的学习保证收益满满。

weixin_46107893的博客 220

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

sql优化的N种方法_持续更新

当你访问网站的时候,有的时候会慢的想让你砸电脑,这个时候服务器要背锅了吗? 不,要背锅的不仅仅是服务器,数据库也有很大责任,不负责任的sql开发者更会让你崩溃的.为了提高sql响应速度,还是好好了解下sql的优化吧 sql优化的方式 1: explain关键字 :使用explain关键字来查看当前sql语句的执行情况,来对症下药.因为内容较多,放在最后进行讲解 2: 正确的建立索引:索引的建立对sql的影响是非常大的,如果对索引不太理解的可以看我另一篇文章: ............

wang5701071的博客 8万+

SQL持续更新中

问: 什么是SQL?答:结构化查询语言;其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为方言。通用语法-- 注释内容/* 注释 */SQL分类。

如无必要勿增实体 1656

mysql 练习题(持续更新中)

表名与字段名: –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id) – –课程编号, 课程名称, 教师编号 –3.教师表 Teacher(t_id,t_name) –教师编号,教师姓名 –4.成绩表 Score(s_id,c_id,s_sc...

路西法Lucifer 1039

Flink系列Table API和SQL之:动态表、持续查询、将流转换成动态表、更新查询、追加查询、将动态表转换为流、更新插入流(Upsert)

Flink系列Table API和SQL之:动态表、持续查询、将流转换成动态表、更新查询、追加查询、将动态表转换为流、更新插入流(Upsert)

zhengzaifeidelushang的博客 3346

【SQL Server】常用Code及练习题

常用Sqlserver Code以及相关练习

小管博客空间站 1699

SQL烂笔头【持续更新】

整理常见关系型数据库中不常用但用到时又忘记怎么写的SQL

u011447403的专栏 1268

SQL注入入门(持续更新中)

SQL注入的核心在于将用户输入错误地解析为SQL代码。通过严格控制输入处理、采用安全编程实践,可有效防范此类攻击。

seronectf的博客 1123

高频SQL 50 题(持续更新)

学习编写SQL

weixin_73557167的博客 2568

Sql面试50题 详解 持续更新

学习整理sql面试50题

Qiuyuguohou的博客 7675
上一篇: Scala学习笔记持续更新
下一篇: Git的基本使用
keepHungery
博客等级 码龄8年 115粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值