【问题标题】:SQL GROUP BY a resultSQL GROUP BY 结果
【发布时间】:2017-08-03 17:11:27
【问题描述】:

我正在为 SQL 查询而苦苦挣扎。

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

我想要一张这样的桌子:

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

我拥有的是一个包含事件、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

但我需要一个如上所示的表格(天数,用户计数)

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

我希望我能得到结果并按天再次分组。但这在一个查询中不起作用(我无法将 ORDER BY 用于累积列)。

我用的是 Google BigQuery 的 WebUI,临时表好像不太好做。所以我想组合两个查询,但我的 SQL 技能有限。阅读 UNION、WHERE IN 或子查询、相关查询并没有让我更进一步。

任何帮助表示赞赏:-)

【问题讨论】:

标签: sql group-by google-bigquery


【解决方案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?

我正在寻找是否有办法通过一两个分析函数来做到这一点,但到目前为止还没有运气。

【讨论】:

    【解决方案2】:

    选择天数,count(distinct(user)) as user_count 来自我的表 按天分组;

    【讨论】:

      【解决方案3】:

      选择 天, exact_count_distinct(user) as user_count 从 桌子 分组@100 由 1 ;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 1970-01-01
        相关资源
        最近更新 更多