“分组依据”和其他数据库算法?

时间:2009-07-15 03:39:04

标签: database algorithm

我已经编写了一些非常基本的工具,用于对来自非数据库源(例如:CSV,OLTP系统)的数据集进行分组,旋转,联合和小计。 “分组依据”方法是大多数方法的核心。

但是我确信在制作有效的数据分组算法方面已经做了很多工作......我确信我没有使用它们。而且我的Google-fu完全没有提出任何建议。

是否有任何良好的在线资源或书籍描述了创建分组数据的更好方法?

或者我应该开始查看MySQL源代码还是类似的东西?

3 个答案:

答案 0 :(得分:5)

一种非常方便的方法来“分组”一些字段(或一组字段和表达式,但为了简单起见我将使用“字段”!)是你可以安排在分组之前遍历结果(RBG)以排序的方式 - 你实际上并不关心排序(保存在ORDER BY也在那里的常见情况下,恰好与GROUP BY在同一个字段上! - ),而是关于排序的“副作用”属性 - RBG中具有相同分组字段值的所有行都是相继的,因此您可以累积直到分组字段更改,然后发出/生成到目前为止累积的结果,然后继续用新行(具有不同的分组字段值的那一行)重新初始化累加器 - 确保在开始时“刚刚初始化累加器”,并在最后“刚刚发出/产生累积结果”,当然。

如果这不起作用,也许你可以散列分组字段并使用哈希表来为该组累积的结果 - 在RBG的每一行,散列分组字段,检查它是否已经存在哈希表中的一个键,如果没有将其与RBG行适当初始化的累加器放在那里,否则按RBG行更新累加器。你最后只发出一切。问题当然是你要占用更多的记忆直到最后! - )

这是两种基本方法。你想要每个伪代码,BTW吗?

答案 1 :(得分:1)

您应该查看OLAP数据库。 OLAP允许您创建一个聚合数据库,以便以“切片和骰子”方式进行分析。

使用OLAP数据库可以通过任意数量的维度快速分析计数,平均值,分钟,最大值,总和和stdev等汇总度量。

请参阅MSDN上的this OLAP简介。

答案 2 :(得分:0)

给出一个示例CSV文件和想要的结果类型,我可能会为您提供一个Python解决方案。

Python具有CSV模块和列表/生成器理解,可以帮助解决这类问题。

  • 水稻