zoukankan      html  css  js  c++  java
  • 2014-06-06-sql-for-statistics

    2014-06-06-sql-for-statistics--- layout: default title: 用sql语句做简单的数据统计 category: tech ---

    {{ page.title }}


    曾经做过一段时间数据分析的工作,当时刚接手工作的时候,还想着学个专门做统计的工具;
    后来发现一些简单统计,用数据库做就可以了,偶尔用awk来配合一下,或者excel来做个图就能搞定;
    这里就简单来介绍下我用到的一些sql语句,用的是mysql数据库的语法;


    Part 1:基础内容


    首先一些sql自带的统计函数是必须的,count,sum,avg,max,min;
    这些函数望文生义就可以了,都很简单;
    另外基础的就是group by和order by;
    所谓group by就是按组统计,一般配合上面的那几个望文生义的函数使用,如果分组内要加条件就用having;
    下面的例子都基于这个表结构:
    job表字段:server_id(int),id(int),jobresult(varchar255),dt(timestamp),status(int);
    例子:
    {% highlight java %} select server_id ,count(*)as num from job group by server_id order by num; {% endhighlight %}
    这句sql的意思是,从job表中,查询每个server有多少条记录,并且按照num从小到大排序;这个要自己试试才能真正体会。


    Part2:你可能不知道的内容;


    1、按时间统计:比如每五分钟为一个统计时间,
    例子:查询2014年6月6日server_id为30的所有5分钟段内的记录数;
    {% highlight java %} select HOUR(dt) AS h, FLOOR(MINUTE(dt) / 5) AS v,count(*) from job where server_id=30 and dt<"2014-06-06" and dt>"2014-06-05" group by h,v; {% endhighlight %}
    聪明的你肯定能明白这是什么意思,hour和minute都是取时间的函数,floor是取整;
    2、按天统计;一个表里有n天的数据,统计每天的数据;
    你只需要知道一个函数就可以了substr(dt,1,10) as t,这是取前10个字符即“xxxx-xx-xx”时间的前10个字符就是日期了;
    如果有其他方法欢迎告知;
    3、case when,多条件统计;
    例子:统计所有server做任务的成功率(status=1成功)见下面;
    {% highlight java %} select server_id,count(0) as job_num,100*sum(case when status=1 then 1 else 0 end)/count(0)as succ_rate from job group by server order by rate; {% endhighlight %}
    这样一条语句就可以搞定,如果不这样写,你可以用多条语句来实现,就会麻烦很多;


    Part3:一些小技巧:


    1、建索引,如果想要查询速度快, 那就建索引;
    ALTER TABLE `analyip`.`v2ip00` ADD UNIQUE `NewIndex1` (`tk`);
    2、更新数据,根据两个表的条件来更新数据;
    UPDATE v2ip01 a,tkip01 b SET b.v2ip=a.v2ip, b.sid=a.sid WHERE a.tk=b.tk;
    3、distinct 不重复的,可以sum(distinct server_id)查询有多少不同的server_id;
    4、group_concat();
    用select group_concat(id) from job limit 10; 输出是用逗号隔开的id;这样在做进一步操作时会更方便; 最后再不济写程序,shell脚本很容易实现;

    {{ page.date | date_to_string }}





  • 相关阅读:
    如何完全删除Linux应用
    IP地址获取工具类
    日期处理工具类
    Cookies的工具类
    权限管理系统学习笔记
    SpringBoot中JPA的一些基本操作
    Mysql和Java的数据类型对应表
    MySQL中的tinyint
    幂等性浅谈
    链接
  • 原文地址:https://www.cnblogs.com/miraclespace/p/5190334.html
Copyright © 2011-2022 走看看