每天一道大厂SQL题

简介: 每天一道大厂SQL题

先来10道HiveSQL题:

第1题:访问量统计

需求

我们有如下的用户访问数据

在这里插入图片描述

要求使用SQL统计出每个用户的累积访问次数,如下表所示:

用户id 月份 小计 累积

如何实现?

数据准备
CREATE TABLE test_sql.test1 (
userId string, visitDate string, visitCount INT )
ROW format delimited FIELDS TERMINATED BY "\t"; 
INSERT INTO TABLE test_sql.test1
VALUES
( 'u01', '2017/1/21', 5 ),
( 'u02', '2017/1/23', 6 ),
( 'u03', '2017/1/22', 8 ),
( 'u04', '2017/1/20', 3 ),
( 'u01', '2017/1/23', 6 ),
( 'u01', '2017/2/21', 8 ),
( 'u02', '2017/1/23', 6 ),
( 'u01', '2017/2/22', 4 );

思路分析tips

首先可以使用SQL的GROUP BY语句对用户ID和月份进行分组,然后使用SUM函数统计每组的访问次数。之后再使用SQL的Window函数,如sum() over()进行累积计算,并输出累积访问次数。最后按照用户ID和月份进行排序输出结果。

答案获取

建议你先动脑思考,动手写一写再对照看下答案,如果实在不懂可以回复:大厂sql 即可。

加技术群讨论

联系我进群

文末SQL小技巧

提高SQL功底的思路。1、造数据。因为有数据支撑,会方便我们根据数据结果去不断调整SQL的写法。造数据语法既可以create table再insert into,也可以用下面的create temporary view xx as values语句,更简单。其中create temporary view xx as values语句,SparkSQL语法支持,hive不支持。2、先将结果表画出来,包括结果字段名有哪些,数据量也画几条。这是分析他要什么。从源表到结果表,一路可能要走多个步骤,其实就是可能需要多个子查询,过程多就用with as来重构提高可读性。3、要由简单过度到复杂,不要一下子就写一个很复杂的。先写简单的select * from table..,每个中间步骤都执行打印结果,看是否符合预期, 根据中间结果,进一步调整修饰SQL语句,再执行,直到接近结果表。4、数据量要小,工具要快,如果用hive,就设置set hive.exec.mode.local.auto=true;如果是SparkSQL,就设置合适的shuffle并行度,set spark.sql.shuffle.partitions=4;


目录
相关文章
|
9月前
|
SQL 网络协议 数据库
sql总结喔
sql总结喔
|
2月前
|
SQL 关系型数据库 MySQL
盘点6个SQL小技巧
这篇内容介绍了数据库查询中的各种JOIN操作,包括内联接(inner join)、左外联接(left outer join)、右外联接(right outer join)和全联接(full outer join)。其中,LEFT JOIN可以用于替换NOT EXISTS和NOT IN的查询。接着,文章展示了如何查询每个类别中的最高分记录,以及如何利用GROUP BY和LIMIT获取每个类别中的前N个记录。此外,还提到了MySQL 8引入的新语法LATERAL JOIN,用于更方便地处理这类问题。最后,文章提到了如何高效地统计不同时间范围内的数据量以及对比两个表之间的数据差异。
|
2月前
|
SQL 存储 关系型数据库
sql日常总结
sql日常总结
|
12月前
|
SQL Oracle 关系型数据库
sql
sql
76 0
|
SQL 程序员 数据库
sql 总结
一对多:在多的表中添加建立关系的字段(外键)指向另外一张表。如果需要查询一张表的全部和另外一张表的交集时,使用外连接,连表查询(左外连接)(显示左表的全部信息和右表相关联的信。连表查询(右外连接)(显示右表的全部信息和左表相关联的信。等值连接和内连接查询的是两个表的交集数据,推荐使用内连接。:选择插入必须选择需要插入的字段,选择对应字段的值,批量。查询所有部门的名称,地点和对应的员工姓名和工资。等值连接和内连接查询到的都是两张表的交集数据。外连接查询的是一张表的全部和另外一张表的交集。
102 0
|
SQL 数据挖掘 Python
sql8&10&11&12,3+1
sql8&10&11&12,3+1
sql8&10&11&12,3+1
|
SQL
SQL日常
SQL日常
107 0
xttstartupnomount.sql
connect / as sysdba; startup force nomount; exit;
710 0
|
SQL 数据库 关系型数据库
SQL
SQL查询优先级() not and or SQL模糊查询 '%a' //以a结尾的数据'a%' //以a开头的数据'%a%' //含有a的数据'_a_' //三位且中间字母是a的'_a' //两位且结尾字母是a的'a_' /.
969 0