首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

大数据开发面试必知必会的SQL 30题!!!

需求:我们需要根据这三列数据生成一列结果列,结果列的生成规则为:如果col_1列大于col_2列,则结果为col_1列的数据;如果col_2列大于col_3列,则结果为col_3列的数据,否则结果为col...思路二:按照当日时间求出七日留存,如果用户登陆的时间正好等于当前日期前一天的日期,则去重统计uid数量即为次日留存数,以此类推分别求出三日留存、七日留存。...来看看第二种写法,通过使用rank窗口函数得出并列第一的值,通过where = 1,即可以全部取出最受欢迎的课程。...如果大于则首次购买时间在最近7天内,如果小于则首次购买时间不在最近7天内 select uid, min(order_time) as first_time,...两个表连接,得出第一列为所有已经注册的用户,第二列则为最近三十天购买记录的用户,如果不能连接为null,最后求出null值的个数即为最近30天有购买记录的用户 select count(

1.8K10

数仓面试——连续登录问题进阶版

(1) >= 4 ) tmp4 GROUP BY id; 详解: 1:利用lag(lead),按用户分组,登录时间升序,比较当前日期与上一个登录日期的差 2:如果日期差小于等于2,则连续登录,记为0...; 详解: 1:利用lag(lead) 比较当前日期与上一次登录日期的差 2:如果日期差小于等于2,则连续登录,记为0,否则记为1,记为日期基准 3:添加一个row_number和 count 窗口函数...4:取出日期基准为1的数据和最后一条数据 5:比较当前行和前一行rn的差,为连续登录的天数(最后一行特殊处理) 6:根据用户去重,获得结果 方法四:采用sum分组 SELECT id FROM...GROUP BY id; 详解: 1:利用lag(lead) 比较当前日期与上一次登录日期的差 2:如果日期差小于等于2,则连续登录,记为0,否则记为1,为日期基准 3:利用窗口函数sum,获取用户到当前行的和...,连续登录为0,不是则为1,然后添加一个自增序列,那么就可以把1的和最后一条提取出来,然后计算前后的序列差,但是要注意最后一条要特殊处理 方法四巧妙的利用sum窗口,基准为0的数据sum后还是数据本身,

1.2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Hive窗口函数保姆级教程

    ---- LAST_VALUE的使用: 取分组内排序后,截止到当前行,最后一个值。...如果想要取分组内排序后最后一个值,则需要变通一下: SELECT cookieid, createtime, url, ROW_NUMBER() OVER(PARTITION BY cookieid ORDER...FIRST_VALUE 的倒序取出分组内排序最后一个值!...编写一个 SQL 查询来实现分数排名。 如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。...:通过排序与登录日期之间的差值,因为排序连续,因此若登录日期连续,则差值一致; GROUP BY和HAVING的应用:通过id和差值的GROUP BY,用COUNT找到连续天数大于5天的id,注意COUNT

    2.5K31

    MySQL支持的数据类型

    对于整型数据,MySQL还支持在类型后面的小括号内指定显示宽度,例如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如果不显示指定宽度则默认为int(11)。...数据插入bit类型字段时,首先转换为二进制,如果位数允许,将成功插入,如果位数小于实际定义的位数,则插入失败,下面我们在t2表插入数字2,2的二进制码是“10”,而id2的定义是bit(1),将无法插入...注意:MySQL只给表中的一个TIMESTAMP字段设置默认值为系统日期,如果要为第二个字段设置TIMESTAMP,则系统会报错(MySQL5.7版本) ?...TIMESTAMP还有一个重要特点,就是和时区相关,当插入日期时,会先转换为本地时区后存放;而从数据库里面取出时,也同样需要将日期转换为本地时区后显示。...可以发现,CHAR列最后的空格在操作时都已经被删除了,而VARCHAR依然保留空格。 再来做一个测试,如果插入的值超出了类型的范围 ?

    2.8K30

    开工大吉:几个让你月薪3万+的excel神技能

    函数公式: =VLOOKUP(查找值,数据表,列序数,[匹配条件]) 函数解释: 相当于=VLOOKUP(找什么,在哪找,第几列,精确找还是大概找一找) 最后一个参数[匹配条件]为0时执行精确查找,为1...(或缺省)时模糊查找,模糊查找时如果找不到则返回小于第1个参数“查找值”的最大值。...- 04 - MID函数 用途:截取一个字符串中的部分字符。有的字符串中部分字符有特殊意义,可以将其截取出来,或对截取的字符做二次运算得到我们想要的结果。...- 动图教程 - ▲举例:根据身份证号码,自动获取出生日期,=TEXT(身份证号,"0-00-00")这里的TEXT函数作用是将MID取出的8位数按0-00-00的格式输出显示。...函数公式: =DATEDIF(开始日期,终止日期,比较单位) 函数解释: 参数1须小于参数2,即开始日期小于终止日期,否则会出错; 参数3可以是以下几种,分别代表不同的计算方式: - 动图教程 - ▲举例

    2.7K60

    常见的SQL面试题:经典50例

    用于过滤 组函数 order by ... asc 升序, desc 降序 limit (0,4) 限制N条数据 如: topN数据 如果您正在学习Spring Boot,推荐一个连载多年还在继续更新的免费教程...其中,若员工department_id与location_id为1800的department_id相同,则location为’Canada’,其余则为’USA’。...如果您正在学习Spring Boot,推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com/spring-boot-learning-2x/ 面对该类问题,如何解决呢...by)和汇总函数得到每个组里的一个值(最大值,最小值,平均值等)。...如果对多表合并还不了解的,可以看下我讲过的《从零学会SQL》的“多表查询”。 总结 常见面试题:分组取每组最大值、最小值,每组最大的N条(top N)记录。

    2K20

    【小家SQL】MySql数据类型---日期时间类型的使用(含datetime和timestamp的区别) 0000-00-00 00:00:00问题解释

    `test` (`id`, `a`) VALUES ('4', '2008#0808'); -- 格式没错,但是小于了date类型的最小值1000,但是数据库还是插进去了,我晕 INSERT INTO...一个dateTime类型的字段可以用一个date类型的字段和一个time类型的字段代替。但是如果需要同时记录日期和时间,选择dateTime类型是个不错的选择。...char是定长(每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足),varchar是变长 ? ?...再举个例子:如果是用字符串比较,“2004-04-31"这个string应该比2004-01-01这个date来得大,但是4-31是一个invalid的日期(4月是小月),会被转化成"0000-00-00...由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。

    7.3K20

    Mysql基础6-常用数据库函数

    ,也有可能生成的小数是0.000009这样的小数就算乘以1000000也不够六位整数       3、所以还需要使用rpad()函数,如果整数不足六位,就在后面补0 三、日期函数   1、常见日期函数...(date):获取指定date的日期 date_add(date,interval expr type):返回一个日期/时间值加上一个时间间隔expr后的时间值 datediff(date1,date2...]...else[default] end:如果val1为true,则返回res1,否则返回default默认值 case[expr] when [val1] then [res1]...else[default...] end:如果expr的值等于val1,返回res1,否则返回默认值   2、函数示例 示例1:if(value, t, f):如果value为true,则返回t,否则返回f mysql> select...val1为true,则返回res1,否则返回default默认值     需求:在table_test中,展示姓名和特色一栏,特色根据address的值来设定,北京特色烤鸭,上海特色蟹黄包,西安特色肉夹馍

    32220

    平平无奇SQL面试题:经典50例

    其中,若员工department_id与location_id为1800的department_id相同,则location为’Canada’,其余则为’USA’。.../* 查找1990年出生的学生名单 学生表中出生日期列的类型是datetime */ select 学号,姓名 from student where year(出生日期)=1990; 查询各科成绩前两名的记录...分组取每组最大值 案例:按课程号分组取成绩最大值所在行的数据 我们可以使用分组(group by)和汇总函数得到每个组里的一个值(最大值,最小值,平均值等)。但是无法得到成绩最大值所在行的数据。...每个学生选修某门课程的成绩在下图的每个方块内。我们可以通过分组,取出每门课程的成绩。 ?...第3关,分组 分组,并使用最大值函数max取出上图每个方块里的最大值 select 学号, max(case 课程号 when '0001' then 成绩 else 0 end) as '课程号0001

    2.6K60

    关于查询类接口的一些总结 (第壹节)

    由于项目需要,最近在写一个接口测试脚本,所以许久没有更新了,不过写完后,也有一些收获和大家分享一下 本次写的主要是查询类接口,所以重点说一下编写查询类接口时用到的一些方法 1....按照日期查询 这类查询功能,在平时测试时往往需要选定一个日期,点击查询,然后查看列表中列出的结果是否符合预期 那么针对日期类的查询,如何构造有效的参数呢 要考虑一点:如何使所选定的日期长久有效 假如选定...从一批响应内容中随机取出一个进行断言 使用random.choice()方法,从一组数据中随机取出一个,一般是从一个列表、元祖或字符串中抽取数据 假如一个查询接口中返回了多组数据,每组数据的构造相似,...从所有返回结果中随机取出一组数据,再将那一组数据的某个值与预期断言即可 示例: >>>import random >>>numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] >>...,如果匹配成功则认为查询结果正确 因此可以使用切片方法来取出电话号码的后四位 >>> phone = "188****8888" >>> phone '188****8888' >>> phone[-

    64320

    图解LeetCode——901. 股票价格跨度(难度:中等)

    例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 1, 4, 6]。...【注意】 (例如) S.next(75) 返回 4,因为截至今天的最后 4 个价格(包括今天的价格 75) 小于或等于今天的价格。...堆栈操作有如下3种情况: 【情况1】如果堆栈为空,则直接入栈; 【情况2】如果“栈顶元素”的price大于“输入股票”的price,则输入股票入栈; 【情况3】如果“栈顶元素”的price小于等于“输入股票...”的price,则将“栈顶元素”出栈,并将“栈顶元素”的day值加到“输入股票”的day值上。...关于p向前移动还有一点需要注意的就是,p向前移动格子的数量,就是days的具体值;当days等于1时,就向前移动1个格子;如果days等于2时,就向前移动2个格子(因为days等于2,说明已经是两个格子聚合过的值了

    22230

    结合 React 源码,五分钟带你掌握优先队列

    /article/react-and-priority-queue 最近写一个需求用到了优先队列和二叉堆的相关知识,借此机会梳理了一些二叉堆的相关知识分享给大家。...return; } } } 删除 取出根节点的值对比插入稍微复杂一点,归纳起来可以分为三步: 取出根节点的值 将最后一个元素与根节点进行替换,并删除最后一个元素 下沉 取出根节点。...程序框架 function pop { * 设定 minItem 保存根节点 * 取出最后一个节点与根节点替换,并删除最后一个节点 * 执行下沉循环 * 将根元素与左右子节点对比,挑选较小的与父节点替换位置...* * @flow strict */ // 定义最小堆极其元素,其中 sortIndex 为最小堆对比的 key,若 sortIndex 相同,则对比 id type Heap = Array...diff : a.id - b.id; } 堆排序 利用最大/最小堆的特性,我们很容易就能实现对数组的排序,重复执行 pop 就能进行升序排列,如果要降序,使用最大堆即可,该操作时间复杂度为 nlogn

    63120

    journalctl命令

    -n, --lines=: 显示最近的日志事件并限制显示的事件数,如果使用--follow,则隐含此选项,参数为正整数,是可选的,默认为10。...ID,则正偏移量将查找从日志开始的引导,而等于或小于零的偏移量将查找从日志结束的引导,因此,1表示按时间顺序在日志中找到的第一个引导,2表示第二个引导,依此类推,而-0表示最后一个引导,-1表示最后一个引导之前的引导...如果指定了32个字符的ID,则可以选择后跟偏移量,该偏移量标识相对于boot ID给定的引导,负值表示较早的引导,正值表示较晚的引导,如果未指定offset,则假定值为零,并显示ID给定的引导日志。...(值更低优先级更高)日志级别的所有消息,如果指定了一个范围,则将显示该范围内的所有消息,包括该范围的开始值和结束值,这将为指定的优先级添加PRIORITY=匹配项。...00,如果只省略了seconds组件,则假定为:00,如果省略了date部分,则假定为当前日期,或者理解字符串yesterday、today、tomorrow,分别表示当前日期的前一天00:00:00、

    3.6K20

    sqlite使用简介

    存储方式为INTEGER和REAL的数值小于TEXT或BLOB类型的值,如果同为INTEGER或REAL,则基于数值规则进行比较。 3)....存储方式为TEXT的数值小于BLOB类型的值,如果同为TEXT,则基于文本规则(ASCII值)进行比较。 4). 如果是两个BLOB类型的数值进行比较,其结果为C运行时函数memcmp()的结果。...如果有参数Y,则移除X左侧的任意在Y中出现的字符。最后返回移除后的字符串。 max(X,Y,…) 返回函数参数中的最大值,如果有任何一个参数为NULL,则返回NULL。...min(X,Y,…) 返回函数参数中的最小值,如果有任何一个参数为NULL,则返回NULL。 nullif(X,Y) 如果函数参数相同,返回NULL,否则返回第一个参数。...如果有参数Y,则移除X右侧的任意在Y中出现的字符。最后返回移除后的字符串。

    1K50

    结合 React 源码,五分钟带你掌握优先队列

    /article/react-and-priority-queue 最近写一个需求用到了优先队列和二叉堆的相关知识,借此机会梳理了一些二叉堆的相关知识分享给大家。...return; } } } 删除 取出根节点的值对比插入稍微复杂一点,归纳起来可以分为三步: 取出根节点的值 将最后一个元素与根节点进行替换,并删除最后一个元素 下沉 取出根节点。...程序框架 function pop { * 设定 minItem 保存根节点 * 取出最后一个节点与根节点替换,并删除最后一个节点 * 执行下沉循环 * 将根元素与左右子节点对比,挑选较小的与父节点替换位置...* * @flow strict */ // 定义最小堆极其元素,其中 sortIndex 为最小堆对比的 key,若 sortIndex 相同,则对比 id type Heap = Array...diff : a.id - b.id; } 堆排序 利用最大/最小堆的特性,我们很容易就能实现对数组的排序,重复执行 pop 就能进行升序排列,如果要降序,使用最大堆即可,该操作时间复杂度为 nlogn

    37210
    领券