DB 및 개발/MongoDB

SELECT A,B, SUM(C) FROM test GROYP BY A,B 어떻게?

Eastluck 2012. 10. 10. 16:54

안녕하세요. 이스트럭(강동운) 입니다.


간만에? 포스팅을 하는 군요~!


오늘은.. 아래 쿼리를 어떻게 mongodb에서 표현을 할까?


INSERT INTO TEST1
SELECT A,B, SUM(C) FROM test GROYP BY A,B


일단 쿼리는 mongodb 2.2 부터 가능한 쿼리고요 aggregate를 활용했습니다.


db.test.insert({"a": 1, "b": 1, "c": 100});
db.test.insert({"a": 1, "b": 1, "c": 200});
db.test.insert({"a": 1, "b": 1, "c": 300});
db.test.insert({"a": 1, "b": 1, "c": 400});
db.test.insert({"a": 1, "b": 2, "c": 100});
db.test.insert({"a": 1, "b": 2, "c": 200});
db.test.insert({"a": 1, "b": 2, "c": 300});
db.test.insert({"a": 1, "b": 3, "c": 100});
db.test.insert({"a": 1, "b": 3, "c": 200});
db.test.insert({"a": 1, "b": 4, "c": 100});
db.test.insert({"a": 2, "b": 1, "c": 500});
db.test.insert({"a": 2, "b": 1, "c": 600});
db.test.insert({"a": 2, "b": 2, "c": 300});


db.test.aggregate(
{
 $group : {_id : {"a": "$a", "b": "$b"} , total : { $sum : "$c" }}
}).result.forEach(
 function(f)
 {
  db.test1.save({"a": tojson(f._id.a,'',true), "b": tojson(f._id.b,'',true), "total": tojson(f.total,'',true)});
 }
);

db.test1.find();





원래 $group이라는게.. 이전 버전에서는.. _id: {a: 1, b: 1 .. }이런 방식이였는데.. 2.2 부터는.. _id: {"a": "$a" ...} 이런 방식으로 변경되었나 봅니다 ^^;;


참고 URL 들

http://stackoverflow.com/questions/11418985/mongodb-aggregation-framework-group-over-multiple-values

http://stackoverflow.com/questions/8769323/mongodb-group-by-functionalities

http://docs.mongodb.org/manual/reference/aggregation/#_S_group

http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

http://www.mongodb.org/display/DOCS/SQL+to+Aggregation+Framework+Mapping+Chart



여기가 갑임!! http://dotheweb.posterous.com/mongodb-new-aggregation-framework-and-sql-sid


감사합니다 ^^


작성자: 이스트럭(강동운)

작성일: 2012-10-10