SQL面试题练习 —— 无效搜索

目录

  • [1 题目](#1 题目)
  • [2 建表语句](#2 建表语句)
  • [3 题解](#3 题解)

题目来源:百度。

1 题目

现有一份用户搜索日志,包含用户ID,时间,用户搜索内容。定义 无效搜索:如果用户下一次搜索内容中包含本次搜索内容,则认为本次搜索为无效搜索。请查询用户无效搜索记录。

样例数据

复制代码
+---------+---------------------+------------------------+
| user_id |     search_time      |     search_content      |
+---------+---------------------+------------------------+
|       1 | 2022-01-01 10:00:00 |          apple           |
|       1 | 2022-01-01 11:30:00 |    banana and apple      |
|       1 | 2022-01-01 12:45:00 |        fruit salad       |
|       1 | 2022-01-01 15:00:00 |         apple pie        |
|       1 | 2022-01-01 16:20:00 |   applesauce recipe      |
|       2 | 2022-01-01 10:00:00 |        cat food          |
|       2 | 2022-01-01 11:30:00 |   wet vs dry cat food    |
|       2 | 2022-01-01 12:45:00 | homemade cat food recipe |
|       2 | 2022-01-01 14:00:00 | cat food brands to avoid |
|       2 | 2022-01-01 16:20:00 | best cat food for i...   |
|       3 | 2022-01-01 10:00:00 |          book            |
|       3 | 2022-01-01 11:30:00 |  books like Harry Potter|
|       3 | 2022-01-01 13:00:00 |best selling books ...   |
|       3 | 2022-01-01 14:30:00 |   bookstores near me    |
|       3 | 2022-01-01 15:45:00 |    how to publish a book|
+---------+---------------------+------------------------+

2 建表语句

sql 复制代码
--建表语句
CREATE TABLE user_search_log (
  user_id STRING,
  search_time TIMESTAMP,
  search_content STRING
) STORED AS PARQUET;
--插入数据
INSERT INTO user_search_log
VALUES
  ('1', '2022-01-01 10:00:00', 'apple'),
  ('1', '2022-01-01 11:30:00', 'banana and apple'),
  ('1', '2022-01-01 12:45:00', 'fruit salad'),
  ('1', '2022-01-01 15:00:00', 'apple pie'),
  ('1', '2022-01-01 16:20:00', 'applesauce recipe'),
  ('2', '2022-01-01 10:00:00', 'cat food'),
  ('2', '2022-01-01 11:30:00', 'wet vs dry cat food'),
  ('2', '2022-01-01 12:45:00', 'homemade cat food recipe'),
  ('2', '2022-01-01 14:00:00', 'cat food brands to avoid'),
  ('2', '2022-01-01 16:20:00', 'best cat food for indoor cats'),
  ('3', '2022-01-01 10:00:00', 'book'),
  ('3', '2022-01-01 11:30:00', 'books like Harry Potter'),
  ('3', '2022-01-01 13:00:00', 'best selling books of all time'),
  ('3', '2022-01-01 14:30:00', 'bookstores near me'),
  ('3', '2022-01-01 15:45:00', 'how to publish a book');

3 题解

(1)查询出下一行数据,并把下一行搜索内容作为新字段放到本行

sql 复制代码
select user_id,
       search_time,
       search_content,
       lead(search_content) over (partition by user_id order by search_time asc) as next_search_content
from user_search_log

执行结果

复制代码
+----------+------------------------+---------------------------------+---------------------------------+
| user_id  |      search_time       |         search_content          |       next_search_content       |
+----------+------------------------+---------------------------------+---------------------------------+
| 1        | 2022-01-01 10:00:00.0  | apple                           | banana and apple                |
| 1        | 2022-01-01 11:30:00.0  | banana and apple                | fruit salad                     |
| 1        | 2022-01-01 12:45:00.0  | fruit salad                     | apple pie                       |
| 1        | 2022-01-01 15:00:00.0  | apple pie                       | applesauce recipe               |
| 1        | 2022-01-01 16:20:00.0  | applesauce recipe               | NULL                            |
| 2        | 2022-01-01 10:00:00.0  | cat food                        | wet vs dry cat food             |
| 2        | 2022-01-01 11:30:00.0  | wet vs dry cat food             | homemade cat food recipe        |
| 2        | 2022-01-01 12:45:00.0  | homemade cat food recipe        | cat food brands to avoid        |
| 2        | 2022-01-01 14:00:00.0  | cat food brands to avoid        | best cat food for indoor cats   |
| 2        | 2022-01-01 16:20:00.0  | best cat food for indoor cats   | NULL                            |
| 3        | 2022-01-01 10:00:00.0  | book                            | books like Harry Potter         |
| 3        | 2022-01-01 11:30:00.0  | books like Harry Potter         | best selling books of all time  |
| 3        | 2022-01-01 13:00:00.0  | best selling books of all time  | bookstores near me              |
| 3        | 2022-01-01 14:30:00.0  | bookstores near me              | how to publish a book           |
| 3        | 2022-01-01 15:45:00.0  | how to publish a book           | NULL                            |
+----------+------------------------+---------------------------------+---------------------------------+

在 MySQL 中,INSTR 函数的语法如下:INSTR(string, substring)string 是要搜索的字符串。
substring 是要查找的子字符串。INSTR 函数返回子字符串在字符串中首次出现的位置(从 1 开始)。如果未找到子字符串,则返回 0。

(2)比较搜索内容是否为下一次搜索内容的子字符串,给判断逻辑打标记(如果是返回1,否则返回0)

sql 复制代码
select user_id,
       search_time,
       search_content,
       lead(search_content) over (partition by user_id order by search_time asc)                                      as next_search_content,
       If(instr(lead(search_content) over (partition by user_id order by search_time asc), search_content) > 0, 1,
          0)                                                                                                          as flag
from user_search_log

执行结果

复制代码
+----------+------------------------+---------------------------------+---------------------------------+-------+
| user_id  |      search_time       |         search_content          |       next_search_content       | flag  |
+----------+------------------------+---------------------------------+---------------------------------+-------+
| 1        | 2022-01-01 10:00:00.0  | apple                           | banana and apple                | 1     |
| 1        | 2022-01-01 11:30:00.0  | banana and apple                | fruit salad                     | 0     |
| 1        | 2022-01-01 12:45:00.0  | fruit salad                     | apple pie                       | 0     |
| 1        | 2022-01-01 15:00:00.0  | apple pie                       | applesauce recipe               | 0     |
| 1        | 2022-01-01 16:20:00.0  | applesauce recipe               | NULL                            | 0     |
| 2        | 2022-01-01 10:00:00.0  | cat food                        | wet vs dry cat food             | 1     |
| 2        | 2022-01-01 11:30:00.0  | wet vs dry cat food             | homemade cat food recipe        | 0     |
| 2        | 2022-01-01 12:45:00.0  | homemade cat food recipe        | cat food brands to avoid        | 0     |
| 2        | 2022-01-01 14:00:00.0  | cat food brands to avoid        | best cat food for indoor cats   | 0     |
| 2        | 2022-01-01 16:20:00.0  | best cat food for indoor cats   | NULL                            | 0     |
| 3        | 2022-01-01 10:00:00.0  | book                            | books like Harry Potter         | 1     |
| 3        | 2022-01-01 11:30:00.0  | books like Harry Potter         | best selling books of all time  | 0     |
| 3        | 2022-01-01 13:00:00.0  | best selling books of all time  | bookstores near me              | 0     |
| 3        | 2022-01-01 14:30:00.0  | bookstores near me              | how to publish a book           | 0     |
| 3        | 2022-01-01 15:45:00.0  | how to publish a book           | NULL                            | 0     |
+----------+------------------------+---------------------------------+---------------------------------+-------+

(3)限制标签为1,查询出最后结果

sql 复制代码
select user_id,
       search_time,
       search_content
from (select user_id,
             search_time,
             search_content,
             if(instr(lead(search_content) over (partition by user_id order by search_time asc), search_content) > 0, 1,
                0) as flag
      from user_search_log) t
where flag = 1;

执行结果

复制代码
+----------+------------------------+-----------------+
| user_id  |      search_time       | search_content  |
+----------+------------------------+-----------------+
| 1        | 2022-01-01 10:00:00.0  | apple           |
| 2        | 2022-01-01 10:00:00.0  | cat food        |
| 3        | 2022-01-01 10:00:00.0  | book            |
+----------+------------------------+-----------------+
相关推荐
changshuaihua001几秒前
Redis 详解:Redis 与 MySQL 的区别、数据类型与缓存三大问题
数据库·redis·缓存
qetfw9 分钟前
Debian 配置 AIDE 文件完整性检测:基线初始化、变更检查与数据库更新
linux·网络·数据库·debian
Elastic 中国社区官方博客23 分钟前
Elasticsearch:搜索教程 - 语义搜索(三)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
随风M记忆s2 小时前
Redis支持事务吗?了解Redis的持久化机制吗?
数据库·redis·bootstrap
花青泽3 小时前
5-数据库-SQL注入-联合查询-关键字绕过-day13
数据库·sql
天桥下的卖艺者9 小时前
使用scitable包,两步生成逆概率删失权重(IPCW)
数据库·r语言
隔窗听雨眠10 小时前
AI原生数据库浪潮:国产数据库的架构重构与路径之争
数据库
数据库小学妹10 小时前
数据库选型实战:从数据类型到TCO成本,五维决策框架+九款产品横评
数据库·信创·国产数据库·数据库选型·oracle迁移
龙仔72511 小时前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓
神龙天舞200111 小时前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql