SQL时刻。
目录
1.至少有5名直接下属的经理
2.确认率
3.游戏玩法分析 IV
4.部门工资前三高的所有员工
5.查找拥有有效邮箱的用户
1.至少有5名直接下属的经理
子查询。
1.先找出至少有5名直接下属的经理号managerId
2.根据经理号找到对应名字
# Write your MySQL query statement below
select name
from Employee
where id in (
select managerId
from Employee
group by managerId
having count(managerId)>=5
)
2.确认率
左连接+子查询。
# Write your MySQL query statement below
select s.user_id,round(count(if(c.action='confirmed',1,null))/count(*),2) as confirmation_rate
from Signups s left join Confirmations c
on s.user_id=c.user_id
group by s.user_id;
3.游戏玩法分析 IV
先过滤出每个用户的首次登陆日期,然后左关联,筛选次日存在的记录的比例。
# Write your MySQL query statement below
select round(avg(a.event_date is not null),2) fraction
from
(
select player_id,min(event_date) as login
from activity
group by player_id
) p
left join activity a
on p.player_id=a.player_id and datediff(a.event_date,p.login)=1
ps:
4.部门工资前三高的所有员工
贴优秀题解。
# Write your MySQL query statement below
select Department.name as Department,
e1.name as Employee,
e1.salary as Salary
from Employee as e1,Department
where
e1.departmentId=Department.id
and 3>(
select count(distinct e2.Salary)
from Employee as e2
where e1.salary<e2.salary and e1.departmentId=e2.departmentId
)
order by Department.name,Salary desc;
5.查找拥有有效邮箱的用户
# Write your MySQL query statement below
#正则表达式,有意思
select t1.*
from Users t1
where t1.mail REGEXP '^[a-zA-Z][a-zA-Z0-9_\./\-]*\@leetcode[\.]com$';
ps:
有些字符需要转义。
一遍终于结束了!!!!!