计算SQL中的新条目

时间:2017-04-24 10:52:08

标签: mysql sql phpmyadmin counting

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

这就是数据的样子:

Database screenshot

ID:这是直接的,它的自动增量

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

time:在unix中输入的时间

address:检测到的已激活的mac地址(出于隐私原因进行哈希处理)

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

nr_packets:收到的数据包数

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

问题是,我想知道哪些条目是新的,以及哪些条目已经存在。我想在下面的表格中显示它。

它应该看起来像这样:

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

P.s如果有任何遗漏信息,请发表评论。我是论坛的新手。

3 个答案:

答案 0 :(得分:2)

嗯,你有一种相当奇怪的定义新的和现有的。根据你的说法,新客户只是在表中出现一次。无论是今天,昨天还是二十年前。

使用COUNTGROUP 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);