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
);
- 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;
- 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
)
;
代码自己刚开始写的,好就没接触过了,开始准备面试,希望得到纠正。没有考虑性能,简单粗暴^^
可以参考----》》》知乎的文章