2019mysql面试题案例分享
1、现有login_logs日志表,用来记录用户登录的信息情况,字段有:uid,create_time(时间格式为:yyyy-mm-dd i:m:s)
用sql语句查出,2017-06-01日登录次数超过3次的用户信息。
表如下:
思路:1、先查出在2017-06-01日登录的人有哪些
2、通过这些人进行分组过滤
SQL:
select uid from (select uid,date(create_time) from login_logs WHERE date(create_time) = '2017-06-01') as t1 GROUP BY t1.uid HAVING COUNT(*) > 3;
结果如下:
2、条件同上,查出2017-06-01日登录次数最多的用户ID
思路:同样的查出2017-06-01日登录的用户是哪些,并且计数
然后,通过聚集函数MAX进行取最大值即可
SQL: select uid,MAX(mss) from (select uid,COUNT(*) as mss from login_logs WHERE date(create_time) = '2017-06-01') as t1 GROUP BY t1.uid;
结果如下:
3、假设现在有张user_info表,有字段uid,login_times,并且存在uid用户id,现需要将login_logs中每个用户登录的次数记录到user_info表中,请问SQL语句如何写?
思路:如果UID存在的情况下,直接更新login_times即可
SQL: update user_info set login_times = (select count(*) from login_logs where uid = user_info.uid);