首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql/php:按类分组

mysql/php:按类分组
EN

Stack Overflow用户
提问于 2014-01-24 11:42:14
回答 1查看 86关注 0票数 1

我有一个带有百分比的表(值为0-100) (让我们假设表name=TableA中只有1列名为%)。

我想要做的是在班级中划分百分比。例如,假设是width=2类,我的最后结果是:

代码语言:javascript
复制
percent | quantity
------------------
[0-2)   | 5
[2-4)   | 43
...     | ...
[96-98) | 232
[98-100]| 173

我已经考虑了一些方法,但我需要一个有效的方法,考虑到该表包含大约500.000行。最后,我将用php创建一个图表,所以我并不关心解决方案是基于mysql的还是基于php的。

(嗯,这肯定不是最合适的,但我正在写,这样我就能清楚地说明我想要什么)。

代码语言:javascript
复制
select count (*) from tableA where percent>=0 and percent<2;
select count (*) from tableA where percent>=2 and percent<4;
...

2)使用php读取每一行并对其进行分类

代码语言:javascript
复制
select * from tableA
<?php while ($row=...)
$class[intval($row[0]/50)]++; ?>

3)创建一个表TableB,类似于:

代码语言:javascript
复制
floor | roof
------------
0     | 2
2     | 4
4     | 6
...   | ...

然后

代码语言:javascript
复制
select tableB.floor/2,count(*) 
from tableA join tableB 
on tableA.percent>=tableB.floor and tableA.percent<tableB.roof
group by tableB.floor/2

我更喜欢第二个,虽然我不确定用php还是用mysql进行计算比较好。

你有什么更好的主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-24 11:52:14

您可以使用公式创建直方图桶,而无需第二个表的帮助。

代码语言:javascript
复制
SELECT count(*), FLOOR(percent/2)*2 percent
  FROM tableA
 GROUP BY FLOOR(percent/2)*2
 ORDER BY FLOOR(percent/2)*2

这应该非常有效,特别是在您的percent列上有索引的情况下。

例如,percent值18和19将由组按公式转换为18。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21331784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档