赞
踩
方式一:
SELECT 字段1,字段2,字段3……
FROM table_1
JOIN table_2 ON table_1和table_2的连接条件
JOIN table_3 ON table_2和table_3的连接条件
WHERE 不包含组函数的过滤条件
(如:salary>5000) AND 不包含组函数的过滤条件
GROUP BY …… , ……
HAVING 包含组函数的过滤条件
ORDER BY …… ASC/DESC
LIMIT …… , ……
方式二:
SELECT 字段1,字段2,字段3……
FROM table_1 , table_2 , table_3
WHERE 多表的连接条件
AND/OR 不包含组函数的限制条件
GROUP BY …… , ……
HAVING 包含组函数的限制条件
ORDER BY …… ASC/DESC
LIMIT …… , …
注:
组函数: group by 进行分组的字段函数。
where:不能使用聚合函数SUM,AVG,COUNT和分组中的函数,但是先筛选条件再关联,执行效率高
运算符 | 作用 | 示例 |
---|---|---|
IN | 判断一个值是否为列表中的任意一个值 | select d from table where c in(a,b) |
NOT IN | 判断一个值是否不是列表中的任意一个值 | select d from table where c not in(a,b) |
ISNULL | 判断值、字符串或表达式是否为空 | select a from table where a isnull |
IS NOT NULL | 判断值、字符串或表达式是否不为空 | select a from table where a is not null |
LEAST | 在多个值中返回最小值 | select d from table where c least(a,b) |
GREATEST | 在多个值中返回最大值 | select d from table where c greatest(a,b) |
BETWEEN AND | 判断一个值是否在两个值之间 | select d from table where c between a and b; 等价于 select d from table where c >= and c<= b |
LIKE | 判断一个值是否符合模糊匹配的规则 | select a from table where b like ‘%_%’ |
REGEXP | 判断一个值是否符合正则表达式的规则 | select a from table where b regexp ’ ’ |
IF(value,value1,value2)
: 如果value的值为TRUE,返回value1,否则返回value2。IFNULL(value1,value2)
: 如果value1不为NULL,返回value1,否则返回value2。EXISTS、NOT EXISTS
: 常常伴随子查询使用 — select name from student where sex = ‘f’ and mark exists(select a from b where …) 。CASE WHEN 条件1 THEN 结果
WHEN 条件2 THEN 结果2
ELSE 结果3 END
函数 | 释义 | 说明 |
---|---|---|
space(n) | space(n) | 返回n个空格。 |
left(str,len) | left(字符,从最左边开始截取到第几位) | 从字符最左边截取一定数量的字符。 |
right(str,len) | right(字符,从最右边开始截取到第几位) | 从字符最右边截取一定数量的字符。 |
repeat(str,count) | repeat(字符串,重复该字符n次) | 连续重复出现该字符n次。 |
instr(str,substr) | instr(主串,子串) | 函数返回子串在 字符串中首次出现的位置。 |
substr(string,start,length) | substr(字符串,第几个字符开始,截取字符个数) | 从字符的某处开始截取,一定长度的字符。 |
replace(str,from_str,to_str) | replace(字符,字符中指定字符,替换的新字符) | 将主串中 某个子串替换成另一部分字符。 |
string_agg(name,‘,’) | string_agg(列名,连接符 | 将表中某一列数据通过特定符号连接。 |
concat(str1,str2,…) | concat(字符1,字符2,…) | 拼接字符1,字符2……。 |
concat_ws(‘-’,str1,str2,…) | concat(‘间隔符’,字符串1,字符串2) | 第一位为分隔符,将每个字符间隔开。 |
TRIM(str) TRIM(substr from str) | TRIM(字符开头包含空格) | 去除首尾空格。 去除开头和结尾的某字符 |
LTRIM(str) | LTRIM(字符开头包含空格) | 去除首部空格。 |
RTRIM(str) | RTRIM(字符尾部包含空格) | 去除尾部空格。 |
LPAD(str,len,padstr) | LPAD(字符,总长度,空位填充符) | 左对齐。 |
RPAD(str,len,padstr) | RPAD(字符,总长度,空位填充符) | 右对齐。 |
ETL(N,str1,str2,str3,…) | ETL(N,字符1,字符2,……) | 返回第几个字符串。 |
FIELD(str,str1,str2,str3,…) | FIELD(待查询字符,字符1,字符2,…) | str字符第一次出现的位置。 |
FIND_IN_SET(str,strlist) | FIND_IN_SET(字符,字符列表) | 返回字符在字符列表中的位置,如FIND_IN_SET(‘mm’,‘gg,mm,dd,jj’)返回结果为 2。 |
REVERSE(str) | reverse(字符) | 将字符顺序颠倒,abcd变成dcba。 |
函数 | 释义 | 说明 |
---|---|---|
regexp_instr(source_string, pattern, position, occurrence, return_option, match_parameter) | source_string:要搜索的字符串 pattern:正则表达式模式,用于匹配字符串 position:可选参数,指定从哪个字符位置开始搜索。默认为1 occurrence:可选参数,指定要返回的匹配项的序号。默认为1 return_option:可选参数,指定返回的匹配项的位置类型,如起始位置、结束位置等。默认为0 match_parameter:可选参数,指定匹配模式,如大小写敏感、多行模式等。默认为NULL。 | 在字符串中搜索匹配正则表达式的子字符串,并返回其在源字符串中的位置。 |
regexp_substr(source_string, pattern, position, occurrence, match_parameter) | source_string:要搜索的字符串 pattern:正则表达式模式,用于匹配字符串 position:可选参数,指定从哪个字符位置开始搜索。默认为1 occurrence:可选参数,指定要返回的匹配项的序号。默认为1 match_parameter:可选参数,指定匹配模式,如大小写敏感、多行模式等。默认为NULL。 | 在字符串中匹配并返回第一个符合正则表达式的子字符串。 |
regexp_replace(source_string, pattern, replace_string, position, occurrence, match_parameter) | source_string:要搜索的字符串 pattern:正则表达式模式,用于匹配字符串 replace_string:要替换匹配项的字符串 position:可选参数,指定从哪个字符位置开始搜索。默认为1 occurrence:可选参数,指定要替换的匹配项的序号。默认为NULL match_parameter:可选参数,指定匹配模式,如大小写敏感、多行模式等。默认为NULL。 | 在字符串中搜索匹配正表达式的子字符串,并用指定的字符串替换它们。 |
regexp_split_to_table(string text, pattern text, flags text) | string:是要分割的字符串,pattern:是用来分割字符串的正则表达式,flags参数是一个可选的标志参数,用来指定正则表达式的匹配选项。函数返回一个表格,每一行都是分割后的子串。 | 它可以将一个字符串按照正则表达式分割成多行。select regexp_split_to_table(‘apple,banana,orange’, ‘,’) 返回的结果为: apple banana orange 这里我们使用了逗号作为分隔符,因此函数会将字符串分割成三行。注意,返回结果中的每一行都是text类型的。 还可以使用flags参数来指定正则表达式的匹配选项。比如,如果我们想不区分大小写地匹配字符串,可以使用’c’标志: select regexp_split_to_table(‘Apple,Banana,orange’, ‘,’, ‘c’) |
regexp_split_to_array(source, pattern , flags) | source表示要拆分的字符串 pattern表示正则表达式 flags表示可选的标志,可以用来指定正则表达式的匹配模式。 | 将一个字符串按照正则表达式拆分成多个子串,但是它将这些子串放入一个数组中返回,而不是放入一个表中。 如:SELECT regexp_split_to_array(‘hello,world’, ‘,’);执行该语句后,将返回一个包含两个元素的数组,分别为"hello"和"world"。 需要注意的是,regexp_split_to_array函数返回的是一个数组,而不是一个表,因此无法直接使用SELECT语句查询其结果。如果需要查询数组中的元素,则需要使用如下语法:SELECT regexp_split_to_array(‘hello,world’, ‘,’)[1];执行该语句后,将返回数组中第一个元素"hello"。 |
窗口函数的基本写法
窗口函数写法: | OVER (PARTITION BY <分组字段> ORDER BY <排序字段> ASC/DESC<窗口范围>]
说明:*<窗口函数>* 是指在窗口内执行的聚合函数,例如 SUM、AVG、COUNT 等;*PARTITION BY* 是指按照哪个字段进行分组;*ORDER BY* 是指按照哪个字段进行排序;*<窗口范围>* 是指窗口的大小,可以是行数(ROWS)或者范围(RANGE)。
释义:
<窗口函数>
:窗口函数是一种特殊的聚合函数,它可以在窗口内进行计算,并且返回多行结果。常见的窗口函数有 SUM、AVG、COUNT、MAX、MIN 等。<分组字段>
:指按照哪个字段进行分组计算。如果不指定分组字段,则整个表被视为一个分组。<排序字段>
:指按照哪个字段进行排序。如果不指定排序字段,则使用默认的排序顺序。<窗口范围>
:指窗口的大小和位置。可以使用 ROWS 指定窗口大小为行数,或者使用 RANGE 指定窗口范围为数值范围。窗口范围可以是当前行之前的若干行,或者是当前行及其前后若干行。例如:
select name,salary,row_number() over (partition by department order by salary desc) as row_num
from employees
函数 | 释义 | 说明 |
---|---|---|
– | – | – |
– | – | – |
– | – | – |
– | – | – |
– | – | – |
– | – | – |
– | – | – |
– | – | – |
排名函数
:row_number(),rank(),dense_rank()聚合函数
:max(),min(),count(),sum(),avg(),median()向前向后取值
:lag(),lead()百分位
:percent_rank()取值函数
:first_value(),last_value(),nth_value()分箱函数
:ntile()1、排名函数
函数 | 说明 |
---|---|
row_number() | 同薪不同名,相当于行号,例如3000、2000、2000、1000排名后为1、2、3、4 |
rank() | 同薪同名,有跳级,例如3000、2000、2000、1000排名后为1、2、2、4 |
dense_rank() | 同薪同名,无跳级,例如3000、2000、2000、1000排名后为1、2、2、3 |
2、聚合函数
函数 | 说明 |
---|---|
max() | 最大值 |
min() | 最小值 |
avg() | 平均值 |
sum() | 求和 |
median() | 中位数 |
3、向前向后取值
函数 | 说明 |
---|---|
ag(field,n,default) | 前N行,在一次查询中取出当前行的同一字段(field参数)的前面第n行的数据,如果没有用default代替 |
lead(field,n,default) | 后N行,在一次查询中取出当前行的同一字段(field参数)的后面第n行的数据,如果没有用default代替 |
4、百分位
函数 | 说明 |
---|---|
percent_rank() | 计算分组内每一行所在的百分比排名 |
5、取值函数
函数 | 说明 |
---|---|
first_value() | 分组内第一行的值 |
last_value() | 分组内最后一行的值 |
nth_value(expr, n) | 分组内第n行的值 |
6、分箱函数
函数 | 说明 |
---|---|
ntile(n) | 将分区中已排序的行划分为大小尽可能相等的n个已排名组(等频分箱) |
7、移动平均
函数 | 用法 |
---|---|
n PRECEDING | 前n行 |
n FOLLOWING | 后n行 |
CURRENT ROW | 当前行 |
UNBOUNDED PRECEDING | 窗口第一行 |
UNBOUNDED FOLLOWING | 窗口的最后一行 |
本文常见的窗口函数部分参考博文详细链: SQL常用窗口函数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。