Chinaunix首页 | 论坛 | 博客
  • 博客访问: 38778
  • 博文数量: 2
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-04 13:16
文章分类

全部博文(2)

文章存档

2011年(2)

我的朋友

分类: Mysql/postgreSQL

2011-12-15 23:23:42

今天工作中要做这样一个事情:从MySQL数据表中获取每三行的平均值,然后给PHP在网页中做拟合显示。也就是原来表格中有300行数据,太多了显示不全,于是拟合一下,三行算一行,就显示100行的。在网页上呈现这100行的拟合数据,使得用户可以概览数据情况。

参考了网上的一些资料,主要通过下面两种方式结合起来实现:

1,使用CEIL函数:(参考了网址:)

  1. SELECT AVG(value) AS val, CEIL(id / 3) AS group_id FROM table GROUP BY group_id

通过让id / 3取整作为分组,就可以求取每组的平均值了,每组最大最小值也可通过Max和Min函数获取。

如果要拟合的行不是整数也没关系CEIL(id / 2.5) 也可正常工作,不过这样求出来的是前两行作为一个分组,后面三行作为一个分组,基本不影响拟合效果。

2,通过表查询的结果,其id不是连续的,所以无法直接用CEIL(id / 3),怎么办呢,可以插入一列到查询结果,令这一列的内容就是行号,MySQL没有直接的方法,可以通过自定义变量来解决,也还算优雅。(参考网址)

  1. set @mycnt = 0;
  2. select (@mycnt := @mycnt + 1) as ROWNUM , othercol from tblname order by othercol;

通过结合方式1,2,我们就可以用一个查询语句(当然得用子查询)实现求取多行平均值的功能了。

阅读(9902) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:99 Problems by Erlang, List 1-10

给主人留下些什么吧!~~