计算 SQL 中的新条目

Counting new entries in SQL

我正在做一个项目,我在其中搜索 wifi 探测信号(来自手机等)。它会检测 wifi 传感器半径内的每个 mac 地址。然后,此数据从服务器发送到数据库,数据库使用报告工具显示统计信息。这可以在商店中用于研究顾客行为。

数据是这样的:

ID:这个很简单,是自增

sensorid:所用传感器的ID(我们使用3个传感器将信号强度以dBm为单位转换为米,然后可以计算到地图上的位置)

time: unix进入时间

address:检测到的 hased mac 地址(出于隐私原因散列)

meanmax:以 dBm 为单位的信号强度

nr_packets: 收到的包数

oui:oui(mac地址的前6个字符)

问题是,我想知道哪些条目是新的,哪些条目已经存在。然后我想在 table 中显示它,如下所示。

它看起来应该有点像这样:

New customer | Existing customer
--------------------------------
*Amount*     | *Amount*

P.s 如有遗漏,请留言。我是论坛的新手。

评论太长了。

给定您的数据库和问题,数据集中的每个客户在某个时候都是客户。因此,您的问题等同于:"How many unique customers do I have" 和 "How many records".

这很简单:

select count(distinct address) as numCustomers, count(*) as numRecords
from t;

我真的不认为这是你想要的,但它是你所问问题的答案。

我建议您再问一个问题,重点关注您要绘制的数据。

嗯,你对新的和现有的定义有点奇怪。按照你的说法,一个新客户是在 table 中只出现一次的客户。不管是今天、昨天还是二十年前。

使用 COUNTGROUP BY address 计算每个客户的数量。如果为 1,则客户为 "new".

select what, count(*)
from
(
  select 
    address, 
    case when count(*) = 1 then 'new' else 'existing' end as what
  from mytable
  group by address
) new_or_old
group by what;

我想几个子查询会给你答案。 GROUP BY address 两者,但只看一下新客户出现 1 次的计数,以及现有客户出现超过 1 次的第二个字段。

    SELECT 
    COUNT((SELECT 
            COUNT(address)
        FROM
            my_table
        GROUP BY address
        HAVING COUNT(address) = 1)) AS `newCustomers`,
    COUNT((SELECT 
            COUNT(address)
        FROM
            my_table
        GROUP BY address
        HAVING COUNT(address) > 1)) AS `existingCustomers`
FROM
    my_table;