我正在开展一个项目,在那里我搜索wifi探测信号(来自手机等)。它检测wifi传感器半径内的每个mac地址。然后将此数据从服务器发送到数据库,该数据库使用报告工具显示统计信息。这可以在商店中用于研究客户行为。
这就是数据的样子:
ID:这是直接的,它的自动增量
sensorid
:使用的传感器的ID(我们使用3个传感器将信号强度以dBm转换为米,然后可以计算到地图上的位置)
time
:在unix中输入的时间
address
:检测到的已激活的mac地址(出于隐私原因进行哈希处理)
mean
和max
:以dBm为单位的信号强度
nr_packets
:收到的数据包数
oui
:oui(mac地址的前6个字符)
问题是,我想知道哪些条目是新的,以及哪些条目已经存在。我想在下面的表格中显示它。
它应该看起来像这样:
New customer | Existing customer
--------------------------------
*Amount* | *Amount*
P.s如果有任何遗漏信息,请发表评论。我是论坛的新手。
答案 0 :(得分:2)
嗯,你有一种相当奇怪的定义新的和现有的。根据你的说法,新客户只是在表中出现一次。无论是今天,昨天还是二十年前。
使用COUNT
和GROUP BY address
为每位客户计算一次。如果是1,则客户是“新的”。
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;
答案 1 :(得分:0)
评论太长了。
鉴于您的数据库和问题,数据集中的每个客户在某个时刻都是新客户。因此,您的问题相当于:"我有多少独特的客户"和"记录多少"。
这很简单:
select count(distinct address) as numCustomers, count(*) as numRecords
from t;
我真的不认为这是你想要的,但这是你问过的问题的答案。
我建议您提出另一个问题,重点关注您想要绘制的数据。
答案 2 :(得分:0)
我认为有几个子查询会给你答案。 GROUP BY address
两者都有 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;
,但只有一个只考虑新客户出现1次的计数和现有客户出现次数超过1次的第二个字段。
function get_mime_Type($filename) {
$MimeArray = array(
"rmvb" => "application/vnd.rn-realmedia-vbr",
"m3u8" => "application/x-mpegurl",
"ts" => "video/MP2T",
"avi" => "video/x-msvideo",
"wmv" => "video/x-ms-wmv",
"3gp" => "video/3gpp",
"flv" => "video/x-flv",
"mp4" => "video/mp4",
"mpeg" => "video/mpeg",
"mpg" => "video/mpeg",
"mpe" => "video/mpeg",
"qt" => "video/quicktime",
"mov" => "video/quicktime",
"mxu" => "video/vnd.mpegurl",
// "mkv" => "video/mkv",
"mkv" => "video/x-matroska; codecs='theora, vorbis'",
"ts" => "video/webm",
// "ts" => "video/MP2T",
"avi" => "video/x-msvideo",
"movie" => "video/x-sgi-movie"
);
// get base name of the filename provided by user
$filename = basename($filename);
// break file into parts seperated by .
$filename = explode('.', $filename);
// take the last part of the file to get the file extension
$filename = $filename[count($filename)-1];
// find mime type
return $MimeArray[$filename];
}
$files = glob("www/$lnk/*.{mp4,flv,mkv,avi,rmvb}", GLOB_BRACE);
sort($files);
$S = '"';
$i = -1;
$first = basename($files[0]);
foreach ($files as $filename) {
$vName = basename($filename);
$finfo = pathinfo($vName);
$file_name = basename($vName,'.'.$finfo['extension']);
$file_name = str_replace("-", " " ,$file_name);
$file_name = str_replace("_", " " ,$file_name);
$file_name = str_replace(".", " " ,$file_name);
// $fName = basename($filename,'.mp4');
// $fName = basename($fName,'.flv');
// $fName = basename($filename,'.AVI');
// $fName = basename($fName,'.avi');
// $fName = basename($filename,'.MP4');
// $fName = basename($fName,'.FLV');
$i++;
$gt_type=get_mime_Type($vName);