SQL 面试编程 1 、假设数据库中有一张用户置录日志表,表名为user_login_log

1、假设数据库中有一张用户置录日志表,表名为user_login_log,字段有uscrname(用login time(登录时间),示例数据如下表:

在这里插入图片描述
问题:请使用 SQL 语言作答:
创建user_login_log

CREATE TABLE user_login_log(
		username VARCHAR(55) not null,
		login_time DATETIME not null
 );
  1. 2017年1月份登录次数最多前100 名的用户名

使用group by 获得的数据是无序的,所以使用排序(降序),
在Oracle中查询行数可以使用rownum,MySQL不支持

SELECT username ,logintimes
FROM (
SELECT username, count(username) AS logintimes
FROM user_login_log
WHERE login_time 
BETWEEN "2017-01-01" AND "2017-01-31"
GROUP BY username

) 
as log
ORDER BY logintimes DESC LIMIT 0,100;
  1. 2017年2月份新增用户数(即之前从未登录过的用户)

先查询时间早于2017年2月的用户

Select username,login_time 
from user_login_log
where login_time < "2017-02-01"
GROUP BY username;
SELECT username 
FROM user_login_log
WHERE username NOT IN
(
Select username 
from user_login_log
where login_time < "2017-02-01"
GROUP BY username 
)

and
username  IN
(
Select username 
from user_login_log
where login_time <= "2017-02-28"
GROUP BY username
)
;

代码自己刚开始写的,好就没接触过了,开始准备面试,希望得到纠正。没有考虑性能,简单粗暴^^

可以参考----》》》知乎的文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值