随笔分类 - Database
摘要:给定Log表,查询各用户最长连续登录天数。 `Log` + + + | user_id | int | | login_time | date | + + + 解题思路:1,给各用户的登录日期组内排序。用窗口函数ROW_NUMBER实现。 2,因为row_number是连续的,所以如果login_t
阅读全文
摘要:给定user_behavior表,要求查询次日,7日和30日用户留存率。 `user_behavior` + + + | user_id | int | | user_behavior_id | int | | time | datetime| + + + 解题思路:1,首先clarify次日,7日
阅读全文
摘要:1,SELECT语句中的列应全部用于GROUP BY子句 2,COUNT(*)和COUNT(col_name)的区别: COUNT(*):查询所有行的数目,包含NULL COUNT(col_name):不包含NULL 3,UNION和UNION ALL的区别: UNION:会去重,会对结果自动排序
阅读全文
摘要:给定user_time表,表中字段分别是user_id , time(用户访问时间),要求查询每个用户相邻两次浏览时间之差小于三分钟的次数。 `user_time` + + + | user_id | int | | time | datetime| + + + 解题思路:1,将用户的每个浏览时间与
阅读全文
摘要:给定transactions表,查询各用户平均交易间隔。 `transactions` + + + | user_id | int | | transaction_time | datetime| + + + 解题思路:1,将用户的每个交易时间与该用户的下一个交易时间放在同一行中。使用窗口函数LEA
阅读全文
摘要:给定transactions表,查询每天上午和下午的交易量分别是多少。 `transactions` + + + | user_id | int | | created_at | datetime| + + + 解题思路:1,首先clarify上午和下午的定义。现定为上午11点(包含)之前为上午,之
阅读全文
摘要:子查询,是指在查询语句中嵌套查询语句。(这里指的是普通子查询,而非关联子查询) 以下是子查询出现的几种形式: 1,在WHERE子句中的子查询 这种是最常见的普通子查询。如果子查询返回的结果只有1个,那么就称为标量子查询。例如: SELECT * FROM sales_agents WHERE age
阅读全文
摘要:以下是经常用到的SQL创建语句(适用于MySQL): 创建数据库: CREATE DATABASE IF NOT EXISTS database_name DEFAULT CHARACTER SET utf-8 创建表: CREATE TABLE IF NOT EXISTS table_name (
阅读全文
摘要:某些SQL查询语句与Pandas语句可以互相转换。 以下表(命名为df)为例: sex tip total_bill 0 Female 1.01 16.99 1 Male 1.66 10.34 2 Male 3.50 23.68 3 Male 3.31 23.68 4 Female 3.61 24.
阅读全文
摘要:以下是经常用到的SQL增删改语句(适用于MySQL): 插入数据: INSERT INTO table_name <col_name> VALUES (...) 插入单行数据:INSERT INTO ... VALUES (...) 插入多行数据:INSERT INTO ... VALUES (..
阅读全文
摘要:查找重复记录: 1,重复记录根据单个字段来判断 在People表中,a列中的值重复即算重复记录: SELECT a, COUNT(*) FROM People GROUP BY a HAVING COUNT(*) > 1 2,重复记录根据多个字段来判断 在People表中,a列和b列中的值都重复即算
阅读全文
摘要:公共表表达式(CTEs)是一个命名的临时结果集。CTE不作为对象存储,仅在查询执行期间持续。 有时我们在处理一些复杂查询的时候,需要把查询内容一步步分解,最后计算出想要的结果。因此我们需要保存这些中间数据,但是计算出最后结果之后这些数据就没用了,因此我们需要把这些中间计算过程保存在一个临时的结果集里
阅读全文
摘要:topN问题是SQL面试里经常考的一个问题,即如何取每组最大的N条记录。 这里摘取leetcode上的一道题,因为主要为了说明如何选取topN的记录,因此这里删掉了第二张表(不需要进行两表连接)。 题目:根据Employee表中的信息,找出每个部门工资前三高的员工信息(部门号,姓名,工资) | Id
阅读全文
摘要:分页实际上就是从结果集中截取当前所需要展示的那部分内容。 为什么需要进行分页查询?当使用SELECT查询时,如果结果集数据量很大,比如有上万条记录,一次性查询所有结果会变得很慢,因此需要使用分页查询。 分页查询的几种方式: 1,限定+偏移(LIMIT ... OFFSET ...) 首先确定每页需要
阅读全文
摘要:针对相同的表进行的连接被称为“自连接”(self join)。 那么为什么要把相同的一张表连接起来呢?一开始还是挺难理解的。把它想象成连接两张不同的表,这样容易理解一些。事实上,自连接还是有很多用处的。 自连接的用途: 1,在同一张表内进行比较 例子:查找收入超过各自经理的员工的姓名 Id | Na
阅读全文
摘要:关联子查询和普通子查询的区别在于:1,关联子查询引用了外部查询的列。 2,执行顺序不同。对于普通子查询,先执行普通子查询,再执行外层查询;而对于关联子查询,先执行外层查询,然后对所有通过过滤条件的记录执行内层查询。 语法: SELECT column1, column2 FROM table1 AS
阅读全文
摘要:CASE表达式是用来判断条件的,条件成立时返回某个值,条件不成立时返回另一个值。 语法: CASE WHEN ComparsionCondition THEN result WHEN ComparsionCondition THEN result ELSE other END (注:各分支返回的数据
阅读全文
摘要:在大多数编程语言中,代码是按照编码顺序执行的,但是在SQL语言中,尽管SELECT语句第一个出现,但却不是第一个被执行的。 SQL查询语句内部执行顺序: from子句 >where子句 >group by子句 >聚合函数 >having子句 >select 字段 >order by子句 每个执行步骤
阅读全文
摘要:窗口可以理解为记录集合,窗口函数就是在满足某种条件的记录集合上执行的特殊函数。窗口函数也称为OLAP函数,OLAP即实时分析处理(Online Analytical Processing)。 语法: window_function (expression) OVER ( [ PARTITION BY
阅读全文
摘要:数据分析经常要用SQL(Structured Query Language)在数据库中查询所需的数据。以下是经常用到的SQL查询语句(适用于MySQL): SELECT 选择需要查询的内容 SELECT column_name(s) FROM table_name WHERE 给查询结果加上过滤条件
阅读全文