기능추가한 새버전을 보세요 ==> 
http://tost.tistory.com/177 





보통 데이터에서 그룹핑을 하는건 DB에서 자주 쓰인다.

근데, db를 안쓰고도 자료형의 값을 할 수 있는 유틸을 만들어야 하는 상황이 왔다.
루비를 접한지 2주밖에 안되서 좀 미루다가... 오늘 책도 정독하고 고민하면서
이틀을 고민해서 만들었는데 생각보다 편하게 잘 나온거 같다.

아무튼 루비에서 Hash타입이라면 범용적으로 쓸 수 있게 구현했다. (코드를 보면 알 듯)

sql문이랑 비교하는 글쓰다보니 손봐서 where절처럼 필터링하는것도 추가하면 괜찮을듯하다
사실 add, addAll 할 때  걸러내는건 쉽게 구현이 될테니 skip 했는데... 
뭐 귀찮으니 필요하면 그 때 만들자. 



 sql문 내가 만든 코드와 비교하면 
 select
   max(size) ,
   max(size) ,
   sum(size) ,
   count(key) ,
   min(size)

from
  table
group by
   filedate.substr(1,4)
 
 
# count, sum, max, min, first 라는 기능은 구현해놨다.
 table = { "size" => "20" ... 생략 ... }

 obj = GroupHash.new
 obj.set_field("max(size), max(size),sum(size),count(key), min(size)")
 obj.addAll( table

 result = obj.group { |map| 
  map["filedate"].slice(0,4)
 }

puts result 


뭐 이런것이랄까요 ?
DB의 내장함수인 max, sum, count, min 같은것도 및에 소스코드를 보면 알겠지만 함수명과 매칭된다.
혹시 추가적으로 기능을 추가하고 싶다면 쉽게 추가할 수 있다.
동적으로 호출하기 때문에 함수기능만 추가하고, set_field에 세팅할때 쿼리에 추가만 하면된다.






+ Recent posts