第17题:查询当天阅读最多的 100 篇文章
需求列表
第2题 查询当天阅读最多的 100 篇文章
上述结果上传 HIVE 表 t_log_clean ,字段分别为 ftime uid postid , 请计算 2020 年 1 月 1日 当天阅读最多的 100 篇文章
思路分析
- 筛选出指定日期的数据:我们可以使用 where 子句来过滤出 ftime 字段等于 ‘2020-01-01’ 的数据,这样就只保留了当天的日志记录。
- 统计每篇文章的阅读次数:我们可以使用 group by 子句和 count 函数来对 postid 字段进行分组和计数,这样就得到了每篇文章当天的阅读次数。
- 按照阅读次数降序排序:我们可以使用 order by 子句和 desc 关键字来对阅读次数进行降序排序,这样就把阅读最多的文章排在前面。
- 取出前 100 篇文章:我们可以使用 limit 子句和 100 参数来限制返回的结果集数量,这样就只保留了前 100 篇文章。
答案获取
建议你先动脑思考,动手写一写再对照看下答案,如果实在不懂可以点击下方卡片,回复:大厂sql
即可。
参考答案适用HQL,SparkSQL,FlinkSQL,即大数据组件,其他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;