【问题标题】:Calculating the mode with SQLite with grouping使用带分组的 SQLite 计算模式
【发布时间】:2018-12-02 04:48:07
【问题描述】:

我有一个带有 ID(IP 地址)和一个因子变量(Web 浏览器)的表,我需要创建另一个表,其中每个 ID 都有一条记录,以及因子变量的模式。我在想SELECT ip, MODE (browser) FROM log GROUP BY ip之类的东西。

不幸的是,SQLite 没有实现MODE 函数,所以这不起作用。我想用每个浏览器的计数构建一个临时表,然后使用 SELECT DISTINCT ONRANK () 语句,但 SQLite 也不支持这些。

此外,最好在单个语句中执行此操作,因为我还需要其他几个因素的模式(并且也按相同的 ID 分组)。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    要计算众数,请按browser 列分组,获取每个组的COUNT(*),按该值排序,然后取最大值的记录。

    如果您已经有另一个 GROUP BY,请使用相关子查询:

    SELECT ip,
           (SELECT browser
            FROM log AS log2
            WHERE ip = ips.ip
            GROUP BY browser
            ORDER BY COUNT(*) DESC
            LIMIT 1)
    FROM (SELECT DISTINCT ip
          FROM log) AS ips
    

    【讨论】:

      【解决方案2】:

      有一个带有时间戳、标签和延迟的日志表。我们想查看每个标签的延迟(发送时间:ST)MODE (módusz) 值,按时间戳分组。一组数据值的 MODE 是出现频率最高的值。

      select L, T, avg( ST ) as MODEST, C
      from (
          select L, T, ST, count( ST ) as C
          from (
                  select label as L, 
                               substr( substr( timeStamp, 0, 8) || '00000000', 0, 14 ) as T, 
                               latency as ST 
                  from LOG 
                  order by L, T, ST 
                  ) as XX 
          group by L, T, ST 
      ) as YY
      where L || '#' || T || '#' || C in (  select L || '#' || T || '#' || max(C)
                                            from(
                                              select L, T, count( ST ) as C
                                              from (
                                                select label as L, 
                                                substr( substr( timeStamp, 0, 8) || '00000000', 0, 14 ) as T, 
                                                latency as ST
                                                from LOG 
                                              ) as XX 
                                              group by L, T, ST ) as YY
                                            group by L, T )
      group by L, T, C
      

      【讨论】:

        猜你喜欢
        • 2020-10-03
        • 2021-08-14
        • 1970-01-01
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-10
        相关资源
        最近更新 更多