题目:请你写出一个sql语句查询每个日期登录新用户个数,并且查询结果按照日期升序排序;

缺陷思路:两张按date分过组的两张相同的表通过user_id作比较,表1不在表2中的user_id就是新用户,

最后算出总数;

#错误写法:用user_id字段比较两张表,受局限性影响,不能将某日新用户为0的统计结果不显示; #SELECT l1.date, COUNT(l1.date) AS new

FROM login AS l1

WHERE l1.user_id NOT IN (SELECT l2.user_id from login AS l2

WHERE l2.date < l1.date)

# OR l1.user_id IN (SELECT l3.user_id from login AS l3

# WHERE l3.date < l1.date) - l1.user_id

GROUP BY l1.date

正确写法:通过设置条件:子查询

(并进行用户分组,去掉某日期同一用户多次登录,min()函数统计每个用户在的第一天登录的日期)

进行查询后,并进行日期分组,得出每日新用户登录数量;

SELECT l1.date, SUM( CASE WHEN (l1.user_id, l1.date) IN (SELECT l2.user_id, MIN(l2.date) FROM login AS l2 GROUP BY l2.user_id) THEN 1 ELSE 0 END) AS new FROM login AS l1 GROUP BY l1.date ORDER BY l1.date ASC