SQL练习(1)-牛客1-39

一、 SQL29 计算用户的平均次日留存率

在这里插入图片描述

二、SQL34 统计复旦用户8月练题情况

在这里插入图片描述

三、SQL35 浙大不同难度题目的正确率

在这里插入图片描述

四、tips

1、聚合函数结果作为筛选条件时,不能用where,而是用having语法,配合重命名即可
2、查询结果去重:DISTINCT()
3、组合查询 union all 去重 union不去重
SQL 25 查找山东大学或男性
在这里插入图片描述
4、COUNT(*) 函数返回表中的记录数
5、where放group by前面,having 放group by 后面
6、SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。HAVING 子句可以让我们筛选分组后的各组数据。
7、按字符分割后取出,可使用substring_index函数可以按特定字符串截取源字符串。
substring_index(FIELD, sep, n)可以将字段FIELD按照sep分隔:
(1).当n大于0时取第n个分隔符(n从1开始)之后的全部内容;
(2).当n小于0时取倒数第n个分隔符(n从-1开始)之前的全部内容;
eg:
substring_index(substring_index(profile, ‘,’, 3), ‘,’, -1) as age
SQL32 截取年龄
在这里插入图片描述
8、order by 【排序升序asc 降序desc】
eg、SQL33 找出每个学校GPA最低的同学
利用相关子查询,把每个学校的最低gpa当作查询条件,去找出每个学校的gpa最低的同学。因为每个学校只有一个gpa最低的同学,所以最后出来的结果不需要再用group by,用order by排序就好
在这里插入图片描述
或使用窗口函数

<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列名>)
<窗口函数>的位置,可以放以下两种函数:
1、专用窗口函数,比如rank, dense_rank, row_number等 rank 如果有并列名次的行,会占用下一名次的位置 1 1 3
2、dense_rank 如果有并列名次的行,不占用下一名次的位置 1 1 2 row_number 如果有并列名次的行,也不考虑并列名次的情况
3、聚合函数,如sum. avg, count, max, min等 针对自身记录、以及自身记录之上的所有数据进行计算
在这里插入图片描述

9、返回限制行数,mysql:limit区别于sql server:top
my sql:

select * from tablename limit m, n

sql server

select top 5 id from table 

eg、SQL4 查询结果限制返回行数

10、过滤空值:is Not Null

猜你喜欢

转载自blog.csdn.net/ariarko/article/details/129338732