两道java面试时考到的SQL题

一.
蚂蚁金服需要评估用户的信用风险,用于为用户提供基于信用的各种服务。每个用户有一些基本信息(比如学历,年龄等)。另外每个用户存在一个或者多个支付宝账户,其中一个账号会作为用户的主账户,假设主账户的规则是账户余额最多的账户,如果两个账户余额相同,则选择注册时间较早的账户。具体表结构设计如下:
用户表(users),账户信息表(accounts)
users
img

accounts
img

假设数据库为MySOL,请用一条SQL语句,计算 userid=123的用户对应的主账?

二.
t_employee
img
请写出SQL语句查询2000年9月后加入开发部(o_dep_id=1)的所有姓’李’的同事的名字,及其上司的名字(无上司,则输出 无),请注意SQL的可读性及效率。
测试数据:
img
执行结果:
img

select * from users u where userid = (select userid from accounts where u.userid=userid order by balance desc,reg_time desc limit 0 ,1)

补充这两道题的正确答案:

  1. SELECT * FROM accounts WHERE user_id=123 ORDER BY balance DESC,reg_time DESC LIMIT 0,1

  2. SELECT f_name as 名字,IFNULL((select f_name from t_employee where f_id = e.o_manage_id),'无') as 上司 FROM t_employee e WHERE o_dep_id=1 and f_name LIKE '李%' AND f_join_date>'2000-09-01'