SQL GROUP BY结果

时间:2017-08-03 17:11:28

标签: sql group-by google-bigquery

我正在努力处理SQL查询。

我想要完成的任务是计算5天内使用该应用的用户数,4天内有多少用户等。

我想要一张这样的桌子:

days | user_count
---- | ---
   5 | 2
   4 | 2
   2 | 1
   1 | 1

我所拥有的是包含events,event_date和user_id的日志文件。所以我设法查询的是:

SELECT 
  user_id,
  COUNT(DISTINCT event_date) AS days
FROM
  mytable
GROUP BY user_id

这是结果表。

user_id | days
------- | ----
      a | 5
      b | 5
      c | 4
      d | 4
      e | 2
      f | 1

但是我需要一个如上所示的表(days,user_count)

问题:如何通过一个查询获得结果?

我希望我能在几天后再拿出结果再分组。但是这在一个查询中不起作用(我的原因不能使用带有累积列的ORDER BY)。

我正在使用Google BigQuery的WebUI,看起来临时表并不容易。所以我考虑组合两个查询,但我的SQL技能有限。阅读关于UNION,WHERE IN或子查询的相关查询并没有给我带来任何进一步的信息。

感谢任何帮助: - )

3 个答案:

答案 0 :(得分:1)

一种简单的方法是嵌套查询。 (创建一个内存表或内联视图但是你想要查看它)

SELECT count(User_ID) cnt, days
FROM (SELECT user_id
           , COUNT(DISTINCT event_date) AS days
      FROM mytable
      GROUP BY user_id) z
GROUP BY days
ORDER BY Days Desc

参考:Does BigQuery support SubQueries?

我正在寻找是否有办法用一两个分析功能做到这一点,但到目前为止还没有运气。

答案 1 :(得分:0)

选择days,count(distinct(user))为user_count 来自mytable 按天分组;

答案 2 :(得分:0)

选择 天, exact_count_distinct(user)as user_count 从 表 小组@ 100 by 1 ;