首页 > 数据库 >蚂蚁数据 SQL 真实面试题

蚂蚁数据 SQL 真实面试题

时间:2024-10-31 12:20:36浏览次数:3  
标签:面试题 蚂蚁 20241011 dd days ovd SQL 1000 uid

来自蚂蚁数据研发一面:

  • 有一张用户贷款信息表dwd_trd_loan_tb_dd,包含uid(用户id)、amt(贷款金额)、ovd_days(逾期天数)、dt(时间分区)以及逾期等级配置表dim_ovd_config_dd,包含ovd_days(逾期天数),user_level(用户风险等级)
  • 注意:示例如下,当ovd_days=1且user_level=1,表示用户逾期天数<=1时,用户风险等级都为1;当ovd_days=30且user_level=2,表示用户逾期天数>1同时<=30时,用户风险等级为2;
  • 问题:计算20241011日所有贷款用户对应的风险等级
    -- 举例如下:
    -- 输入
    -- dwd_trd_loan_tb_dd
    uid   amt   ovd_days     dt
    1001  1000     0       20241011
    1002  1000     33      20241011
    1003  1000     12      20241011
    1004  1000     68      20241011
    -- dim_ovd_config_dd
    ovd_days  user_level
    1             1
    30            2
    60            3
    180           4
    -- 输出
    uid   user_level
    1001      1
    1002      3
    1003      2
    1004      4

    2,测试数据

  • create table dwd_trd_loan_tb_dd (
    uid varchar(20),
    amt bigint,
    ovd_days bigint,
    dt varchar(20)
    );
    create table dim_ovd_config_dd (
    ovd_days bigint,
    user_level bigint
    );
    INSERT INTO dwd_trd_loan_tb_dd VALUES 
    ('1001',1000,0,'20241011'),
    ('1002',1000,33,'20241011'),
    ('1003',1000,12,'20241011'),
    ('1004',1000,68,'20241011')
    ;
    INSERT INTO dim_ovd_config_dd VALUES 
    (1,1),
    (30,2),
    (60,3),
    (180,4);

    3,解题思路

  • 思路分析:
    1,看到多张表,先进行JOIN,但是一眼看去好像只能用逾期天数进行关联,可以又无法直接关联,那么就笛卡尔积(考虑到配置表很小)
    2,这时候我们就需要判断每个用户的逾期天数是否小于所有配置的逾期天数,如果是则记为1,这时候会出现一个用户对应多个1,我们要取对应配置逾期天数最小的那一条,怎么办?
    3,按照uid进行分组,配置逾期天数进行排序,对标志位进行求和,最后取开窗结果为1的行记录即可

with t1 as(select d1.uid,sum(case when d1.ovd_days>d2.ovd_days then 1 else 0 end) AS grade
from dwd_trd_loan_tb_dd d1 left join dim_ovd_config_dd d2 group by d1.uid)
select t1.uid,ROW_NUMBER() over (order by grade,uid) grade from t1;

标签:面试题,蚂蚁,20241011,dd,days,ovd,SQL,1000,uid
From: https://blog.csdn.net/GDDGHS_/article/details/143382042

相关文章

  • 小白手把手教学用spring框架实现mybatis和mysql以及工作原理
    Maven_Mybatis_Mysql什么是MybatisMyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJavaObj......
  • MySQL的主从切换在什么情况下使用
    主从切换一般在如下情况下才进行:1、例行的主库重启,主库运行一段时间后需要将主库进行重启扫盘,降低主库死机的风险;2、主库异常情况下切到从库。3、分机房网络调整涉及到主库的情况。一、MySQL的主从切换在什么情况下使用主从切换一般在如下情况下才进行:1、例行的主库重启,主库......
  • 在 Odoo 中,确实可以通过 SQL 语句来提升一些功能逻辑的处理效率。将 SQL 转为 Python
    1.使用env.cr.execute执行SQL语句OdooORM提供的env.cr.execute()可以直接执行SQL语句,这样可以在Python代码中调用SQL逻辑,结合Odoo的业务模型实现复杂的逻辑操作。execute()方法适合处理批量数据更新、复杂查询等。示例:批量更新customer_id字段defupdate_......
  • 200道网络安全常见面试题合集(附答案解析+配套资料)零基础入门到精通,收藏这一篇就足够了
    有不少小伙伴面临跳槽或者找工作,本文总结了常见的安全岗位面试题,方便各位复习。祝各位事业顺利,财运亨通。在网络安全的道路上越走越远!所有的资料都整理成了PDF,面试题和答案将会持续更新,因为无论如何也不可能覆盖所有的面试题。php爆绝对路径方法?单引号引起数据库报错......
  • 在 SQL 中,有许多高效、简洁的函数可用于数据处理、查询优化和数据转换。
    以下是一些常见的SQL函数及其详细中文解释、示例和总结:1.COALESCE作用:COALESCE函数从左到右依次检查其参数,并返回第一个非空的值。如果所有参数都为空,则返回NULL。应用场景:可以在处理缺失数据时使用,尤其是多个字段可能为空的情况下,可以选择一个优先级最高的非空值。......
  • 遇到慢查询怎么办?一文解读MySQL 8.0查询分析工具
    本文分享自华为云社区《【华为云MySQL技术专栏】MySQL8.0EXPLAINANALYZE工具介绍》,作者:GaussDB数据库。1.EXPLAINANALYZE可以解决什么问题MySQL8.0.18版本开始支持查询分析工具EXPLAINANALYZE,该工具不仅会实际执行SQL语句,还会展示SQL语句详细的执行信息,包含执行算子(It......
  • 织梦取消MySQL错误日志生成文件功能防止暴露后台和管理员
    问题描述织梦程序在MySQL错误时会生成 mysql_error_trace.inc 文件,记录错误信息,可能导致后台目录和管理员账号信息泄露。解决方法编辑 dedesql.class.php 文件打开 /include/dedesql.class.php 文件。删除错误日志生成代码找到以下代码并删除://保存MySql错......
  • MySQL max_allowed_packet参数设置
    MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受max_allowed_packet参数限制,导致写入或者更新失败。(比方说导入数据库,数据表)查看目前配置:代码如下:mysql>showVARIABLESlike'%max_allowed_packet%';+--------------------------+--------......
  • mysql 一次插入多少数据性能最佳
    mysql一次插入多少条是最佳性能我们经常会浏览,分享,点赞,都会产生数据,这些数可能会被存储到不同的地方,其中最常见的存储载体就是--数据库。根据场景和数据特性,可以有关系型数据库mysql,也有非关系数据库,例如:Redis,比如说:当你在网站点赞的时候,为了快速响应,可能是一个基于内存的......
  • 为数据集而生的 SQL 控制台
    随着数据集的使用量急剧增加,HuggingFace社区已经变成了众多数据集默认存放的仓库。每月,海量数据集被上传到社区,这些数据集亟需有效的查询、过滤和发现。每个月在HuggingFaceHub创建的数据集我们现在非常激动地宣布,您可以直接在HuggingFace社区中对您的数据集进行SQL......