前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有关SQL的面试题

有关SQL的面试题

作者头像
润森
发布2019-08-29 11:24:37
7080
发布2019-08-29 11:24:37
举报
文章被收录于专栏:毛利学Python毛利学Python

最近群里有人问了,有关SQL的面试题。

我SQL也不咋地。

第一题

代码语言:javascript
复制
CREATE TABLE user_visit_log(
  ds STRING COMMENT’日期 分区字段’,
  user_id BIGINT COMMENT’Uin’,
  visit_time BIGINT COMMENT’访问时间戳 单位s’,
  scene BIGINT COMMENT’进入应用的场景’,
  sessionid STRING COMMENT’单次访问会话id’,
  appid STRING COMMENT’应用id’
)
  • 问题:获取当天访问人数Top10的应用在当天最后一个会话访问的用户、场景和会话id

第二题

代码语言:javascript
复制
CREATE TABLE f_test_d
(
Ftime BIGINT COMMENT’按天分区’,
Id STRING COMMENT’用户id’,
Page BIGINT COMMENT ‘访问官网落地页id’
)

每天千万甚至上亿的记录数,每天会将当天访问官网的数据insert进该表

  • 问题:求每个用户id最早一次访问不同落地页的日期(注意表B数据量大,思考如何在10分钟内将数据跑出)
首先,我的SQL不是很好,但还是尽量解决。

对于第一题,我联想到leetcode的第N高的薪水的问题,没错第一题最好采用函数的方法,将 N = 10 来作为参数输入

我先给下Leetcode第177题的答案

代码语言:javascript
复制
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    set N = N-1;
  RETURN (
      # Write your MySQL query statement below
        select ifnull(
            (select distinct Salary from Employee  
                order by Salary desc   # 升序排序
                limit N,1),  # N是索引,返回一个
            null)  
      as SecondHighestSalary
  );
END

第一题的思路

  • 将appid根据user_id统计起来,得到第top10的app
代码语言:javascript
复制
SELECT appid from user_visit_log order by count(user_id) desc limit 9,1

这样得到第十的app的名字

  • 再根据visit_time的时间根据不同的日期筛选出最后会话访问的用户、场景和会话id
代码语言:javascript
复制
SELECT user_id,  scene,sessionid  where appid = (SELECT  appid from user_visit_log order by count(user_id) desc limit 9,1) order by visit_time desc limmit 1 group by ds  

第二题的思路

第二题我们可以来想象一个简单的案例,如果我每天都写博客,每篇博客都有对应的id,然后根据日期来分开每天写的文章,其实很像CSDN,博客园的数据库体系,问题就是来求出我每天写的第一篇文章的id。

代码语言:javascript
复制
CREATE FUNCTION getEarlyPageID(Id INT) RETURNS INT PageID
BEGIN
  RETURN (
      # Write your MySQL query statement below
        select ifnull(
            (select distinct Page from f_test_d
                order by Page asc   # asc 是升序
                limit 1 
                 group by Ftime ), 
            null)  

  );
END

首先,很遗憾我解决不了如何在10分钟内将数据跑出的问题,我觉得第二题像是搜查,对于搜索肯定用ElasticSearch,后端很少用SQL进行查询。ElasticSearch我也在慢慢啃。

如何提高SQl

  • 推荐经典的SQL实例一书,美国老大写的,我有时也看看回顾回顾
  • leetcode 刷起来 (别这么猛,狗命要紧)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一题
  • 第二题
    • 首先,我的SQL不是很好,但还是尽量解决。
    • 第一题的思路
    • 第二题的思路
    • 如何提高SQl
    相关产品与服务
    Elasticsearch Service
    腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档