【问题标题】:SQL query: group by, calculate difference between max and min in the group and group by againSQL查询:group by,计算group中max和min的差值,再次group by
【发布时间】:2018-10-26 21:05:14
【问题描述】:

我的数据库在第一列中包含用户 ID 和某些操作的时间戳(登录或单击按钮)。第一条记录(用户 ID、时间)始终是用户登录,有时还有第二条记录,这意味着用户也单击了按钮 -​​ 但情况并非总是如此。具有相同用户 ID 的行永远不会超过 2 行。

"userID" "time"
"0" "1526474096000"
"1" "1526474097000"
"2" "1526474098000"
"3" "1526474099000"
"4" "1526474100000"
"1" "1526474106000"
"0" "1526474107000"

例如,这里只有 ID 为 0 和 1 的用户点击了按钮。
我想计算时间差的直方图(或其他近似值),因为用户太多,我的 RAM 无法为每个用户导入时间差。
我的 SQL 查询看起来像这样(n 是一些直方图 bin 大小):

SELECT COUNT(*), (MAX(time)-MIN(time)/n) as time_difference 
FROM table_name  
GROUP BY userID, time_difference

它不起作用,因为“GROUP BY 子句中不允许使用聚合函数”。

【问题讨论】:

    标签: sql sqlite group-by max min


    【解决方案1】:

    只需使用子查询。我不完全确定你想用那个'/n'做什么,但这至少解决了你的语法错误。

    SELECT time_Difference,
           count(*)
      FROM (SELECT (MAX(time)-MIN(time)/n) as time_difference 
              FROM table_name  
             GROUP 
                BY userID
           ) TMP
     GROUP
        BY time_difference;
    

    【讨论】:

    • 谢谢,这正是我想要的。 'n' 用于创建直方图的 bin,例如,如果您有 time_differences: 12,56,13,7 然后除以整数 n=10,您就有 1,5,1,0。谢谢!
    【解决方案2】:

    你想这样做吗?

    SELECT userID, (MAX(time)-MIN(time)/n) as time_difference 
    FROM table_name  
    GROUP BY userID 
    

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 1970-01-01
      • 2013-04-06
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多