计算 SQL 中的新条目
Counting new entries in SQL
我正在做一个项目,我在其中搜索 wifi 探测信号(来自手机等)。它会检测 wifi 传感器半径内的每个 mac 地址。然后,此数据从服务器发送到数据库,数据库使用报告工具显示统计信息。这可以在商店中用于研究顾客行为。
数据是这样的:
ID:这个很简单,是自增
sensorid
:所用传感器的ID(我们使用3个传感器将信号强度以dBm为单位转换为米,然后可以计算到地图上的位置)
time
: unix进入时间
address
:检测到的 hased mac 地址(出于隐私原因散列)
mean
和 max
:以 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 中只出现一次的客户。不管是今天、昨天还是二十年前。
使用 COUNT
和 GROUP 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;
我正在做一个项目,我在其中搜索 wifi 探测信号(来自手机等)。它会检测 wifi 传感器半径内的每个 mac 地址。然后,此数据从服务器发送到数据库,数据库使用报告工具显示统计信息。这可以在商店中用于研究顾客行为。
数据是这样的:
ID:这个很简单,是自增
sensorid
:所用传感器的ID(我们使用3个传感器将信号强度以dBm为单位转换为米,然后可以计算到地图上的位置)
time
: unix进入时间
address
:检测到的 hased mac 地址(出于隐私原因散列)
mean
和 max
:以 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 中只出现一次的客户。不管是今天、昨天还是二十年前。
使用 COUNT
和 GROUP 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;