MySQL计算最大组的数量

时间:2015-02-24 14:39:39

标签: mysql

我今天早些时候提出了类似的问题,但是我遇到了另一个需要帮助的问题。

我有一个日志记录系统,可以扫描服务器并为在给定时刻在线的每个用户编制目录。这是我的表格的样子:

-----------------
|    ab_logs    |
-----------------
|      id       |
|    scan_id    |
|  found_user   |
-----------------

id是一个自动增量主键。除此之外没有其他实际价值。

scan_id是一个整数,在每次成功扫描所有用户后递增。因此,我可以将结果与不同的扫描分开。

found_user。存储扫描期间在线找到用户的位置。

以上将生成一个如下所示的表:

id  |  scan_id  | found_user
----------------------------
1   |     1     |   Nick
2   |     2     |   Nick
3   |     2     |   John
4   |     3     |   John

所以在第一次扫描时,系统发现只有尼克在线。在第二天它发现了尼克和约翰。只有约翰仍然在线。


我的问题是,我想在每次扫描时连接到服务器的唯一身份总量。换句话说,我想要在每次扫描时连接的用户总数。想想反击。

从上面的例子中,我想从sql得到的结果是:

1
2
2

编辑:

这是我到目前为止所尝试过的,但它错了:

SELECT COUNT(DISTINCT(found_user)) FROM ab_logs WHERE DATE(timestamp) = CURDATE() GROUP BY scan_id

我尝试了什么回复:

1
2
1

2 个答案:

答案 0 :(得分:2)

尝试使用group by子句:

SELECT scan_id, count(*)
FROM mytable
GROUP BY scan_id

答案 1 :(得分:2)

下面的代码应该为您提供所需的结果

select s.scan_id, count(*) from
  (select distinct
    t.scan_id
    ,t1.found_user 
  from 
    tblScans t
    inner join tblScans t1 on t.scan_id >= t1.scan_id) s
group by
  s.scan_id;

这是sqlFiddle
它假设名称是唯一的,包括计数中的当前和每个先前扫描