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-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 }}

来自为知笔记(Wiz)

时间: 2024-10-21 23:32:48

2014-06-06-sql-for-statistics的相关文章

2014/08/06 – Backbonejs

[来自:Backbone.js 开发秘笈 第3章] Collection API (function ($) { //define ----------------------------- var ModelD = Backbone.Model.extend({ defaults: { ID: 0, Name: '' }, idAttribute: 'ID' }); //定义集合对象 /* 在其内部,模型被存储在一个名为 models 的数组当中 */ var CollectionD = Ba

[转载]傅里叶分析之掐死教程(完整版)更新于2014.06.06 - 与时间无关的故事 - 知乎专栏

  傅里叶分析之掐死教程(完整版)更新于2014.06.06 Heinrich 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师. 转载的同学请保留上面这句话,谢谢.如果还能保留文章来源就更感激不尽了. --更新于2014.6.6,想直接看更新的同学可以直接跳到第四章---- 我保证这篇文章和你以前看过的所有文章都不同,这是12年还在果壳的时候写的,但是当时没有来得及写完就出国了-

SQL SERVER 2012/2014 链接到 SQL SERVER 2000的各种坑

本文总结一下SQL SERVER 2012/2014链接到SQL SERVER 2000的各种坑,都是在实际应用中遇到的疑难杂症.可能会有人说怎么还在用SQL SERVER 2000,为什么不升级呢? 每个公司都会有一两个几乎快被人遗忘的系统,接手维护这些系统的人可能都不知换了多少批了.它们的命运注定慢慢消亡.然而偏偏却又生命力顽强,总还有一些人在使用着这些系统.所以就处在一种尴尬的境地: 升级吧,价值不大,可能再过一两年,这系统就要被其它系统替代了.而且项目经理也没有精力.人手耗费在这上面.最

傅里叶分析之掐死教程(完整版)更新于2014.06.06

作者:Heinrich链接:https://zhuanlan.zhihu.com/p/19763358来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师. 转载的同学请保留上面这句话,谢谢.如果还能保留文章来源就更感激不尽了. ——更新于2014.6.6,想直接看更新的同学可以直接跳到第四章———— 我保

(转)傅里叶分析之掐死教程(完整版)更新于2014.06.06

Heinrich · 1 年前 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师. 转载的同学请保留上面这句话,谢谢.如果还能保留文章来源就更感激不尽了. ——更新于2014.6.6,想直接看更新的同学可以直接跳到第四章———— 我保证这篇文章和你以前看过的所有文章都不同,这是12年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者…… 这篇文章

2014.12.06 ASP.NET 三级联动,添加员工,修改员工

(一)三级联动 要实现的效果: 代码: 1 MyDBDataContext context = new MyDBDataContext(); 2 protected void Page_Load(object sender, EventArgs e) 3 { 4 //IsPostBack当前请求是否第一次打开,只有在第一次打开的时候是false,其它时候都是true 5 //在每个Load页面写代码之前,都加上这句话 6 if (!IsPostBack) 7 { 8 ShowProd(); 9

《Pro SQL Server Internals, 2nd edition》的CHAPTER 3 Statistics中的Introduction to SQL Server Statistics、Statistics and Execution Plans、Statistics Maintenance(译)

<Pro SQL Server Internals> 作者: Dmitri Korotkevitch 出版社: Apress出版年: 2016-12-29页数: 804定价: USD 59.99装帧: PaperbackISBN: 9781484219638 统计 SQL Server查询优化器在为查询选择执行计划时使用基于成本的模型.它估计不同执行计划的成本,并选择成本最低的一个.但是,请记住,SQL Server并不搜索查询可用的最佳执行计划,因为评估所有可能的替代方案在CPU方面都是耗时

2014/11/19 SQL Server基础

一.数据库服务命令行 net start mssqlserver →开启本机数据库服务 net stop mssqlserver →停止本机数据库服务 …… pause …… →暂停   …… continue …… →继续 二.文件格式 .mdf格式:数据库存储文件,有且只有一个,保存数据. .LDF格式:日志文件,自动保存操作记录,有且至少一个. .sql文件:编辑文件,用于编写数据库编程语言. 三.数据库各项含义 数据关系图:展示数据库中所有表与表之间的关系 表:存储数据 视图:表的基础上

转载 Servlet3 的 @WebServlet http://www.cnblogs.com/luxh/archive/2012/06/06/2537458.html

我使用的开发环境:MyEclipse10+Tomcat7+JDK6. 开发Servlet3的程序需要一定的环境支持.Servlet3是Java EE6规范的一部分,MyEclipse10和Tomcat7都提供了对Java EE6规范的支持. Tomcat需要Tomcat7才支持Java EE6,Tomcat7需要使用JDK6. 如果使用的MyEclipse的版本较低,没有提供Java EE6的支持,可以到Oracle官方网站下载JavaEE6的SDK进行安装,或者从Tomcat7的解压目录下的l

2016.06.06 周一 C语言 将字符串根据字符的ASCII码从大到小排序并打印出字符串中的字符类型的总数

第一次变量冲突问题 解决了一个多小时,.... 代码如下: ↓ #include<stdio.h> #include<string.h> #define N 200 //输入字符串的最大长度 int main() { //************************输入开始部分******************************** printf("请输入字符串.(长度在200以内)\n\n"); int i=0,j,k,temp,lowLetter