MYSQL:1月份新用户最多的国家/地区?

时间:2017-03-17 06:08:41

标签: mysql postgresql

我有2个表,用户和事件:

**Users:**
usersid
age
geo_country
gender

**events:**
ts
usersid
event
videoid

其中ts是时间戳字段。可能的事件是'start_video','browse_catalog','exit_video'

我想找出1月份哪个国家/地区用户最多。

我的代码如下:

    SELECT DISTINCT (u.geo_country), COUNT(e.userid) As Users_Ids
    FROM (SELECT userid, DATE(MIN(ts)) AS first_time
          FROM events
          WHERE ts BETWEEN '2017-01-01 00:00:00' and '2017-01-31 24:00:00' 
          GROUP BY userid) AS e
    LEFT JOIN users u ON u.userid= e.userid
    GROUP BY first_time
    ORDER BY COUNT(e.userid) DESC; 

由于我没有会话字段,我的子查询是否可以在2017年1月提供新用户?

任何帮助都将受到高度赞赏。

谢谢,

和Claudia

1 个答案:

答案 0 :(得分:0)

我认为您发布的查询稍有不正确。

理论上, GROUP BY 应该描述如何为聚合函数分组数据集。在您的主要查询中,您希望按国家/地区计算用户数,因此聚合 COUNT 不应按first_time分组,而应使用 GROUP BY u。 geo_country ,因此,不再需要geo_country上的 DISTINCT

GROUP BY first_time 也会提供错误的答案,因为它为每个唯一的first_time提供了不是由唯一国家/地区记录的用户数的计数聚合。

正确的查询应该是:

SELECT u.geo_country, 
       COUNT(e.userid) As Users_Ids
FROM (SELECT userid, DATE(MIN(ts)) AS first_time
      FROM events 
      GROUP BY userid
      HAVING first_time BETWEEN '2017-01-01 00:00:00' and '2017-01-31 24:00:00') 
AS e
LEFT JOIN users u ON u.userid= e.userid
GROUP BY u.geo_country
ORDER BY Users_Ids DESC;