ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

每周练习题2

2022-01-29 18:00:52  阅读:161  来源: 互联网

标签:练习题 shirt 每周 over name type SELECT 函数


1.有一张persons表包含如下信息:

 

 

 现要选取居住地址Address以'C'或'h'开头 或以 'et' 结尾的所有数据,结果显示为: 

 

 

 下列MySQL查询语句正确的是:

SELECT * FROM persons WHERE Address REGEXP '[^Ch]|et$';

SELECT * FROM persons WHERE Address REGEXP '^[Ch]et$';

SELECT * FROM persons WHERE Address REGEXP '^[Ch]|et$';

SELECT * FROM persons WHERE Address REGEXP '^[Ch]|[et]$';

^: 匹配输入字符串的开始位置 $: 匹配输入字符串的结束位置 []: 匹配中括号里任意1个 |: 并集,就是或(or) 正确答案:C 

2.SELECT COALESCE(NULL,fat,2)AS name1,COALESCE(pig,test,test)AS name2 FROM NAMETABLE;以上SQL执行后name1和name2分别为多少

NULL,pig

2,test

fat,pig

null,test

COALESCE用法顺口溜,帮助大家理解: COALESCE,查空值, 按顺序不能乱; 核心规则要记牢; 不为空为自己; 为空就看下1位; 一直看下去; 除非只剩后1位; 为空就为它。 

 3. Mysql中表student_table(id,name,birth,sex),插入如下记录:

('1001' , '' , '2000-01-01' , '男');
('1002' , null , '2000-12-21' , '男');
('1003' , NULL , '2000-05-20' , '男');
('1004' , '张三' , '2000-08-06' , '男');
('1005' , NULL , '2001-12-01' , '女');
('1006' , '张三' , '2001-12-02' , '女'); 执行
 select t2.name from 
 (select * from student_table where sex = '女')t1 
 right join 
 (select * from student_table where sex = '男')t2 
 on t1.name = t2.name ;
  的结果行数是()? 做题思路: 看结构:两个子查询表右连接 定子查询表的行数: 子查询表 t1 (女的) :2行 子查询表 t2 (男的) :4行 看连接桥梁: 两个子查询的人名一样
计算连接后行数:右连接,以t2(男的)为主,t2的名字在t1中没有重复的,那么答案就是t2本来的行数4. 

 4.写一段SQL,已知衬衫表SHIRTABLE,请你实现通过窗口函数实现,根据不同的衬衫种类shirt_type,按照销售单价shirt_price从低到高的顺序创建排序表()

SELECT shirt_name, shirt_type, shirt_price,

RANK() OVER (PARTITION BY shirt _type ORDER BY shirt_price) AS ranking

FROM SHIRTABLE
SELECT shirt _name, shirt_type, shirt _price,

PARTITION BY shirt _type ORDER BY shirt _price AS ranking

FROM SHIRTABLE
SELECT shirt _name, shirt_type, shirt _price,

RANK (PARTITION BY shirt _type ORDER BY shirt _price) AS ranking

FROM SHIRTABLE
SELECT shirt _name, shirt_type, shirt _price,

RANK() OVER (PARTITION BY shirt_type) AS ranking

FROM SHIRTABLE
参考分析: 窗口函数:over()窗口函数的语法结构 及常与over()一起使用的分析函数 1、over()窗口函数的语法结构
2、常与over()一起使用的分析函数

1、over()窗口函数的语法结构

over()函数中包括三个函数:分区partition by 列名、排序order by 列名、指定窗口范围rows between 开始位置 and 结束位置(可用\可以不用) 若over()函数中不使用这三个函数,窗口大小是针对查询产生的所有数据,如果指定了分区,窗口大小是针对每个分区的数据。

partition by
partition by可理解为group by 分组。over(partition by 列名)搭配分析函数时,分析函数按照每一组每一组的数据进行计算的。
B、rows between 开始位置 and 结束位置
是指定窗口范围,比如第一行到当前行。而这个范围是随着数据变化的。over(rows between 开始位置 and 结束位置)搭配分析函数时,分析函数按照这个范围进行计算的。

2、常与over()一起使用的分析函数:

2.1、聚合类

avg()、sum()、max()、min()

2.1、排名类
rank() 按照值排序时产生一个自增编号,值相等时会重复,会产生空位(如:1、3、3、6、9)
dense_rank() 按照值排序时产生一个自增编号,值相等时会重复,不会产生空位(如:1、2、2、3、3、4)
row_number() 按照值排序时产生一个自增编号,不会重复(如:1、2、3、4、5、6)      

Rank()分析函数: (1)连续或不连续:dense_rank,rank (2)分区或不分区:使用partition,不使用partition 语法:rank() over(partition by 分区字段 order by 排序字段 顺序)

 

标签:练习题,shirt,每周,over,name,type,SELECT,函数
来源: https://www.cnblogs.com/javaxubo/p/15855542.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有