每天一道大厂SQL题【Day10】电商分组TopK实战
每天一道大厂SQL题【Day10】电商分组TopK实战
大家好,我是Maynor。相信大家和我一样,都有一个大厂梦
,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题
,以每日1题的形式,带你过一遍热门SQL题并给出恰如其分的解答。
一路走来,随着问题加深,发现不会的也愈来愈多。但底气着实足了不少,相信不少朋友和我一样,日积月累才是最有效的学习方式!
每日语录
别看别人表面上一帆风顺,实际上他们背地里,也是一帆风顺。
第10题:电商分组TopK实战
需求
有一个账号表如下,请写出SQL语句,查询各自区组的money排名前十的账号(分组取前10)
dist_id string ‘区组id’,
account string ‘账号’,
gold int ’ 金 币 ’ 实现
请写出SQL语句,查询充值日志表2019年01月02号每个区组下充值额最大的账号,要求结果: 区组id,账号,金额,充值时间
实现:
数据准备
CREATE TABLE test_sql.test10(
`dist_id` string COMMENT '区组id',
`account` string COMMENT '账号',
`gold` int COMMENT '金币');
INSERT INTO TABLE test_sql.test10 VALUES ('1','77',18); INSERT INTO TABLE test_sql.test10 VALUES ('1','88',106); INSERT INTO TABLE test_sql.test10 VALUES ('1','99',10); INSERT INTO TABLE test_sql.test10 VALUES ('1','12',13); INSERT INTO TABLE test_sql.test10 VALUES ('1','13',14); INSERT INTO TABLE test_sql.test10 VALUES ('1','14',25); INSERT INTO TABLE test_sql.test10 VALUES ('1','15',36); INSERT INTO TABLE test_sql.test10 VALUES ('1','16',12); INSERT INTO TABLE test_sql.test10 VALUES ('1','17',158); INSERT INTO TABLE test_sql.test10 VALUES ('2','18',12); INSERT INTO TABLE test_sql.test10 VALUES ('2','19',44); INSERT INTO TABLE test_sql.test10 VALUES ('2','10',66); INSERT INTO TABLE test_sql.test10 VALUES ('2','45',80); INSERT INTO TABLE test_sql.test10 VALUES ('2','78',98);
思路分析
首先,可以通过使用分组字段,求出每个区组下的所有账号的金额总和。
然后,可以使用排序,对每个分组按金额从大到小排序,并选取前10个记录。
最后,限制日期为2019年01月02号,以获得满足要求的结果。
答案获取
建议你先动脑思考,动手写一写再对照看下答案,如果实在不懂可以点击下方卡片,回复:大厂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;
后记
?博客主页:https://manor.blog.csdn.net
?欢迎点赞 ? 收藏 ⭐留言 ? 如有错误敬请指正! ?本文由 Maynor 原创,首发于 CSDN博客? ?不能老盯着手机屏幕,要不时地抬起头,看看老板的位置⭐ ?专栏持续更新,欢迎订阅:https://blog.csdn.net/xianyu120/category_12182595.html
相关文章
- 动如脱兔 静若磐石 新一代云原生无服务数据库Aurora Serverless V2重装上阵
- 新一代国产 NewSQL 昆仑数据库的云上探索和压测表现
- Amazon Aurora Serverless v2正式发布:瞬时扩展应对高要求的工作负载
- 将数据仓库迁移到 Amazon Redshift 时的考虑事项
- 使用多区域 Amazon EKS 和 Amazon Aurora Global Database 扩展应用程序:第 1 部分
- Amazon EMR 上 Apache Hudi 0.9.0 提供的新功能
- 将 Microsoft Azure SQL 数据库迁移到 Amazon Aurora MySQL 兼容版
- 从 Amazon EMR 和 AWS Glue 访问 Amazon S3 中数据的性能优化最佳实践
- java篇
- 使用 Amazon Glue、Amazon Neptune 和 Spline 为数据湖构建数据沿袭
- Amazon Redshift 继续保持在性价比方面的领先地位
- java dfs
- IoT 数据摄入和可视化的 7 种模式 – 如何确定最适合您使用场景的模式
- Data-centric AI之特征工程(第一讲)
- Kylin 4 集成 Amazon Glue Catalog!
- 实时数据处理中的AWS lambda (python) 性能优化
- Python enumerate() 函数
- 无需订阅费! 手把手教你如何在Amazon OpenSearch Service中使用跨集群复制功能(Cross-Cluster Replication)
- Amazon MSK Serverless 现已正式推出–无需再为托管式 Kafka 集群进行容量规划
- AWS IoT TwinMaker 现已正式发布