一亩三分地

 找回密码 注册账号

扫描二维码登录本站

微信公众号
扫码关注公众号
留学申请号
扫码关注留学申请公众号
查看: 428|回复: 6
收起左侧

[其他] 求助sql面试题 加米

[复制链接] |只看干货 |刷题
我的人缘0

升级   5.71%


分享帖子到朋友圈
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (86)
 
 
2% (2)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
求助 答案给加米题目要写一个query to summarizes account balance and number of all open (not closed) accounts by state, as of a specific date (time_stamp): november 15,2020

table: person
time_stamp [date, not null]
access_number [varchar(20).latin.not null]
name [varchar(50).latin]
age [integer]
state [varchar(10).latin]
city [varchar(50).latin]
zipcode [varchar(10).latin]

table: account
time_stamp [date, not null]
account_number [varchar(20).latin.not null]
access_number [varchar(14).latin.not null]
account_status_open_closed_code [varchar(6).latin]
account_status_code [varchar(6).latin]
acct_open_date [date]
acct_reopen_date [date]
acct_closed_date [date]
acct_balance_amount [decimal(15.3)]

题目就给了这些信息
问题1:account table里foreign key 应该是access_number还是account_number呢?
我觉得是access_number,但是account table的长度是varchar(14) 和person table里的access_number [varchar(20)]的长度不一样,没关系吧?

问题2: 请大神帮看看我写的对不对,怎么改?谢谢!
如果知道account_status_open_closed_code是怎么标注open account的,就可以直接where account_status_open_closed_code =’open' group by a.state.
但是现在没给,如果用日期来查询的话,我写的对不对?

SELECT SUM(acct_balance_amount) AS total_balance, COUNT(*)
FROM person AS a
JOIN account AS b
ON a.access_number = b.access_number
WHERE acct_open_date <='2020-11-15' AND (acct_closed_date >'2020-11-15' OR acct_closed_date IS NULL) #一直开着+15号以后才关
OR acct_reopen_date <='2020-11-15' AND acct_closed_date <'2020-11-15' #15号以前关户过,但是15号或以前又重新开户
GROUP BY a.state

求助!!所有回复都给加米呀~

评分

参与人数 4大米 +13 收起 理由
redeye1 + 1 给你点个赞!
ujmopl12oiwc + 1 赞一个
大队管理员 + 10 欢迎分享你知道的情况,会给更多积分奖励!
14417335 + 1

查看全部评分


上一篇:求问dropbox高频题sharpness value
下一篇:有想通过Bootcamp学习software engineering的吗?
我的人缘0

升级   5.71%

 楼主| 睡不着的喵 2020-12-1 04:50:37 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (86)
 
 
2% (2)    👎
自己顶~~~
回复

使用道具 举报

我的人缘0

升级   42%

gennypan1989 2020-12-1 07:41:37 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   91% (53)
 
 
8% (5)    👎
1. 我觉得foreign key应该是access_number,长度没什么关系,这个14, 20只是规定最长的。
2. 关于重新开户在关户之后的情况,是不是应该改成(acct_reopen_date <='2020-11-15' AND acct_reopen_date >= acct_closed_date)
有一点不确定的是,重新开户只会有一次的情况么?如果多次,是不是意味着一个account有多条记录在表里?那是不是还要dedup?

评分

参与人数 1大米 +1 收起 理由
睡不着的喵 + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   0%

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   0% (0)
 
 
0% (0)    👎
#1 虽然长度不同,用名字一样的更靠谱
#2 open_closed_code不是实时变化的,感觉没有用。date用来判断太模糊了, 同一天先开后关和先关后开区分不出来,稍微改了一下,仅供参考
SELECT state, SUM(acct_balance_amount) AS TOTAL_BALANCE, COUNT(1) AS ACCOUNT_NUMBER
FROM account a
LEFT JOIN person p --to make sure every account has been counted
        ON a.access_number = p.access_number
WHERE (acct_open_date <= '2020-11-15' AND acct_closed_date is NULL)
        OR (acct_open_date <= '2020-11-15' AND acct_closed_date > '2020-11-15')
        OR (acct_reopen_date <= '2020-11-15' AND acct_closed_date < acct_reopen_date)
GROUP BY state;

评分

参与人数 1大米 +1 收起 理由
睡不着的喵 + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   5.71%

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (86)
 
 
2% (2)    👎
gennypan1989 发表于 2020-11-30 15:41:37
1. 我觉得foreign key应该是access_number,长度没什么关系,这个14, 20只是规定最长的。
2. 关于重新开户在关户之后的情况,是不是应该改成(acct_reopen_da
重现开多次 去重 说得好!我没考虑到这种corner case

评分

参与人数 1大米 +1 收起 理由
ujmopl12oiwc + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   5.71%

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (86)
 
 
2% (2)    👎
去加州买保时捷 发表于 2020-11-30 15:56:27
#1 虽然长度不同,用名字一样的更靠谱
#2 open_closed_code不是实时变化的,感觉没有用。date用来判断太模糊了, 同一天先开后关和先关后开区分不出来,稍微改了一下,仅供参考
S
非常感谢!下面评论说要考虑去重 重新开关户多次的 应该怎么做呢?

评分

参与人数 1大米 +1 收起 理由
ujmopl12oiwc + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   0%

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   0% (0)
 
 
0% (0)    👎
睡不着的喵 发表于 2020-12-1 09:53
非常感谢!下面评论说要考虑去重 重新开关户多次的 应该怎么做呢?

同一个账户同一时间,只能有开或闭一个状态,个人理解无论是SCD Type 1 or 2,只要找到目标时间开着的就好,不会有重复的。
如果理解错误,请指正,谢谢

评分

参与人数 1大米 +1 收起 理由
睡不着的喵 + 1 赞一个

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■拉群请前往同学同事飞友|拉群结伴版块,其他版块拉群,帖子会被自动删除
■论坛不能删帖,为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://tools.1point3acres.com/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

Some icons made by Freepik from flaticon.com

快速回复 返回顶部 返回列表