首页 > 数据库 >来自蚂蚁数据研发一面的SQL面试题

来自蚂蚁数据研发一面的SQL面试题

时间:2024-11-06 19:15:24浏览次数:5  
标签:面试题 蚂蚁 逾期 dd days ovd SQL 1000 20241011

来自蚂蚁数据研发一面:

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

第一步:先将两个表关联

with t as (
    select l.*,l.ovd_days lovd_days,c.*,c.ovd_days covd_days from dwd_trd_loan_tb_dd l
        join dim_ovd_config_dd c
      on 1=1
)
select * from t ;

with t as (
    select l.*,l.ovd_days lovd_days,c.*,c.ovd_days covd_days from dwd_trd_loan_tb_dd l
        join dim_ovd_config_dd c
      on 1=1
)
select uid,min(user_level) from t where lovd_days < covd_days group by uid  ;

标签:面试题,蚂蚁,逾期,dd,days,ovd,SQL,1000,20241011
From: https://blog.csdn.net/wozhendeyumenle/article/details/143577898

相关文章

  • PentesterTools:简单的SQLMap图形化辅助工具
    原创XiaoTouMingyoHack分享吧免责声明该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。工具介绍SQLmap辅助工具是一款图形用户界面(GUI)工具,旨在简化和增强SQLmap的使用体验。SQL......
  • centos7安装mysql80
    安装1.添加MySQL8.0的官方YUM仓库MySQL8.0没有默认包含在CentOS7的官方仓库中,因此需要手动添加MySQL的官方仓库。yuminstallwget-ywgethttps://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpmrpm-ivhmysql80-community-release-el7-11.n......
  • 2024网络安全面试题大全(附答案详解)看完表示入职大厂稳了
    今天为大家各大厂面试题1.深信服面试题难度系数:中一面:时间太久了,记不太清了,难度相对还是可以的二面:~sql注入的原理是什么–本质:将用户输入的不可信数据当作代码去执行–条件:用户能控制输入;;;原本程序要执行的代码,拼接了用户输入的内容,然后执行~说说Linux的信号机制?~J......
  • 网络安全常见面试题,收藏这一篇就够了
    网络安全常见面试题(一)在这个数字化、信息化的时代,网络安全已经变得至关重要。当我们足迹遍布网络时,自身信息安全、财产安全、合法权益等易受到侵害。对此,我们应加大对网络安全的重视度,并协同做好问题的攻克工作,构筑健康优良的网络空间。这里给大家准备了网络安全常见的面试......
  • 史上最全网络安全面试题汇总
    最近有不少小伙伴跑来咨询:想找网络安全工作,应该要怎么进行技术面试准备?工作不到2年,想跳槽看下机会,有没有相关的面试题呢?为了更好地帮助大家高薪就业,今天就给大家分享一份网络安全工程师面试题,希望它们能够帮助大家在面试中,少走一些弯路、更快拿到offer!php爆绝对路径方法?......
  • 渗透测试面试题汇总(全)
    思路流程信息收集漏洞挖掘漏洞利用&权限提升清除测试数据&输出报告复测问题深信服一面:SQL注入防护为什么参数化查询可以防止sql注入SQL头注入点盲注是什么?怎么盲注?宽字节注入产生原理以及根本原因产生原理在哪里编码根本原因解决办法sql里面只有update怎么利用sql如何写shel......
  • Java网络安全常见面试题
    列举常见的WEB攻击,及解决方案一、SQL注入1、什么是SQL注入攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。2、如何预防SQL注入使用预编译语句(Prepa......
  • mysql5安全审计
    安装插件插件需要严格与数据库版本适配,不然安装过程中会出现问题解压插件cd插件所在路径unzipaudit-plugin-mysql-5.7-1.1.7-921-linux-x86_64.zip#查看mysql默认插件目录mysql>SHOWGLOBALVARIABLESLIKE'plugin_dir';#将插件移动到mysql默认插件目录下cp......
  • Object.assign(), 一道关于基本类型合并的面试题
    vars1="abc";vars2=true;vars3=10;vars4=Symbol("foo")varobj=Object.assign(s1,null,s2,undefined,s3,s4);console.log(obj);//{"0":"a","1":"b","2":"c&quo......
  • mysql 连接查询之内连接、外连接 代码示例
    mysql连接查询可以分为内连接与外连接,外连接又分为左外连接和右外连接,左外连接可以简称为左连接,右外连接可以简称为右连接表数据如下学生表:student学生课程:student_course内连接:将两表满足条件的记录进行笛卡尔乘积--以下3个查询等效,均为内连接select*fromstudentinn......