今天在公司做一个日志分析的任务,在做统计的时候,遇到这样一个问题,

之前已经将数据拆分好,出现这样一张中间表Table,简略写如下:

A属性  B属性  C属性  D属性

1         3          5         7

2         4          6         8

现在A属性 B属性 C属性 D属性代表Table表中的四个字段,他们的value有多个,四个属性都是不为空的,现在需要计算出A属性、B属性、C属性、D属性分别组合之后的组合在Table表中的存在数据条数。

因为把这张分析的中间表放入数据库,本来初期是想SQL语句进行查找,不过可能由于SQL知识比较弱,所以还没想到很好的SQL语句,感觉这样的查找即使写出来,也可能效率很低吧~ 有朋友知道可以告诉我哈~* _ *~

所以转变了一下思路,

1 先通过sql语句group_by 来查找每个字段有几个不同的value值,比如:

select A from Table group_by A;

这样就获取了A属性、B属性、C属性、D属性分别存在的不同value值;

2 现在就需要获取到可能的排列情况喽~由于我目前在用erlang开发项目,自然想到用erlang去实现这样一个功能函数啦~

代码附上:

calc_group(A, B, C, D) ->
%A = [1,2], B = [3,4], C = [5,6], D = [7,8],
Result = lists:foldl(fun(A1, Acc) ->
Result1 = lists:foldl(fun(B1, Acc2) ->
Result2 = lists:foldl(fun(C1, Acc3) ->
Result3 = lists:foldl(fun(D1, Acc4) ->
[{A1, B1, C1, D1} | Acc4]
end, [], D),
%lager:log(info, self(), "Result3:~p", [Result3]),
Acc3 ++ Result3
end, [], C),
%lager:log(info, self(), "Result2:~p", [Result2]),
Acc2 ++ Result2
end, [], B),
%lager:log(info, self(), "Result1:~p", [Result1]),
Acc ++ Result1
end, [], A),
Result.

第一次写这样的链表操作,一个套一个啊(惶恐哦)~~不知道在数据量较大的时候会不会影响太大,目前是还没有测试阶段,不知道线上效果如何,谁还有没有更好的方法呢?

3 最后这一步就好做了,通过获取到的排列组合,可以用sql获取count啦~

这就是今天早上做的第一个任务,做一个简单的统计分析的工作,当然还没有界面,估计后期要用php做个界面给非技术人员统计查看~fighting~

erlang实现排列组合问题的更多相关文章

  1. 学习sql中的排列组合,在园子里搜着看于是。。。

    学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...

  2. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...

  3. 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

  4. 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

  5. 【原创】开源.NET排列组合组件KwCombinatorics使用(一)—组合生成

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

  6. hdu1521 排列组合(指数型母函数)

    题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数.         (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...

  7. [leetcode] 题型整理之排列组合

    一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...

  8. 排列组合算法(PHP)

    用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...

  9. iOS多线程中,队列和执行的排列组合结果分析

    本文是对以往学习的多线程中知识点的一个整理. 多线程中的队列有:串行队列,并发队列,全局队列,主队列. 执行的方法有:同步执行和异步执行.那么两两一组合会有哪些注意事项呢? 如果不是在董铂然博客园看到 ...

随机推荐

  1. CXF实现webService服务(一)

    以前工作中也用CXF,但都是用别人现成搭好的环境,这次自己重头搭建一遍环境.过程中也有遇到的问题,也做了简单的整理. 对于CXF是干什么用的,我不想多说,大家都知道这是我们在Java编程中webSer ...

  2. electron localStorage的bug

    在更新 electron 后有可能会读不到 localStorage 里的数据 推测是 localStorage 写在 Chromium 内核里,更新 electron 同时会更新 Chromium, ...

  3. 深入简出mysql--第一部分

    第二章: 1.sql分类 DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象的定义. 常用的语句关键字主要包括 ...

  4. Go语言的基本语法(二)

    一·if   -else (1) package main import "fmt" // if - else //func main(){ // // 先定义 一个变量 // v ...

  5. react typescript FunctionComponent antd crud

    这个界面跟之前VUE做的一样.并无任何不同之处,只是用react重复实现了一遍. import React, { useState, useEffect } from 'react'; import ...

  6. Centos7 初始化

    systemctl disable firewalld sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config grubby - ...

  7. Java并发(基础知识)—— Executor框架及线程池

    在Java并发(基础知识)—— 创建.运行以及停止一个线程中讲解了两种创建线程的方式:直接继承Thread类以及实现Runnable接口并赋给Thread,这两种创建线程的方式在线程比较少的时候是没有 ...

  8. mxnet 豆瓣镜像源安装

    mxnet安装比较简单,这里直接通过豆瓣镜像源用pip安装 pip install -i https://pypi.doubanio.com/simple/ mxnet-cu100 # 进入ipyth ...

  9. loj2589 「NOIP2009」Hankson 的趣味题

    对于质因数分解理解还不到位. 此题可知$lcm$是$x$的倍数,$x$是$lcm$的约数,只要在$lcm$的分解质因数里对每一个质因子讨论种数即可. 具体来说,对于$lcm$的一个质因子$p$,讨论$ ...

  10. 本地安装sass出错问题解析

    2016年3月23日个人博客文章--迁移到segmentfault 安装sass ruby安装因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby 在安装的时候 ...