MySQL-窗口函数
1. row_number()
-
解释:
row_number函数,按照指定的字段分组、排序,并对每组中的数据进行排序编号; -
参数:
row_number() over(partition by 分组字段 order by 排序字段) -
例子:
每个学生的各科成绩按照分数倒序排列并标记序号: select student_id ,student_name,subject_name, score , row_number() over(partition by student_id order by score desc) as rn from score
-
结果:
student_id | student_name | subject_name | score | rn |
---|---|---|---|---|
110203 | 张三 | 数学 | 98 | 1 |
110203 | 张三 | 语文 | 89 | 2 |
110203 | 张三 | 英语 | 88 | 3 |
110201 | 李四 | 语文 | 93 | 1 |
110201 | 李四 | 英语 | 91 | 2 |
110201 | 李四 | 数学 | 82 | 3 |
110202 | 王二 | 英语 | 98 | 1 |
110202 | 王二 | 语文 | 89 | 2 |
110202 | 王二 | 数学 | 88 | 3 |
2. first_value()
-
解释
first_value()函数,按照指定的字段分组、排序,取出每组中指定的结果字段; -
参数:
first_value(结果字段) over(partition by 分组字段 order by 排序字段) -
例子:
每个学生,最高分学课科目: select student_id ,student_name, row_number(subject_name) over(partition by student_id order by score desc) as subject_name from score
-
结果
student_id | student_name | subject_name |
---|---|---|
110203 | 张三 | 数学 |
110201 | 李四 | 语文 |
110202 | 王二 | 英语 |
MySQL-查询JSON字符串
1. json_extract
-
解释:
json_extract:- a. 取出JSON字符串中的某个值;
- b. 取出JSON数组中指定位置的值
-
参数:
json_extract(字段名称, “$.key值”) -
例子:
json字符串为:one_json = {"a":10,"b":20,"c":30} select json_extract(one_json ,"$.a")
-
结果
10 -
参数:
json_extract(字段名称, “$.[指定位置]”) -
例子:
json数组为:one_jsons = [{"a":10,"b":20,"c":30}, {"a":40,"b":50,"c":60} ] select json_extract(one_jsons ,"$.[1]")
-
结果
{“a”:40,“b”:50,“c”:60}
2. json_length()
-
解释:
json_length:取出JSON字符串的长度 -
参数:
json_extract(字段名称) -
例子:
json字符串为:one_json = {"a":10,"b":20,"c":30} select json_length(one_json )
-
结果
3
3. json_array_length()
-
解释:
json_array_length:取出JSON数组的长度 -
参数:
json_array_length(字段名称) -
例子:
json数组为:one_jsons = [{"a":10,"b":20,"c":30}, {"a":40,"b":50,"c":60} ] select json_array_length(one_jsons )
-
结果
2