group() 實例學習

group({

    key:{key1:1,key2:1}, 對篩選後的數據根據key1,key2進行分組

            cond:{},根據哪些條件進行篩選數據

            reduce:function(curr,res){}, 每一行curr變一次,每個分組res變一次

            initial:{},對每個分組中的臨時變量進行初始化

            finalize:function(){} 對最終的res進行其他操作,如:求平均。

})


==============建表,插數據===================================

----mongo---

db.goods.insert([

{cat_id:2,goods_name:"Nokia",price:900},

{cat_id:3,goods_name:"iPhone6",price:5600},

{cat_id:3,goods_name:"Mac",price:7800},

{cat_id:3,goods_name:"iPhone7",price:7700},

{cat_id:3,goods_name:"iPad mini",price:4500},

{cat_id:4,goods_name:"SanSong",price:890},

{cat_id:4,goods_name:"JinLi",price:550}

{cat_id:5,goods_name:"Meizu1",price:890},

{cat_id:5,goods_name:"Meizu-Note",price:2300},

 ])

 

---mysql---

create table  goods(

cat_id int(10) NOT NULL ,

goods_name varchar(100),

price int(10),

Primary KEY cat_id_goods_name(cat_id,goods_name)

);


insert into goods values 

(2,"Nokia",900),

(3,"iPhone6",5600),

(3,"Mac",7800),

(3,"iPhone7",7700),

(3,"iPad mini",4500),

(4,"SanSong",890),

(4,"JinLi",550);

(5,"Meizu1",890),

(5,"Meizu-Note",2300);

=============group by cat_id============================

案例1:根據類目cat_id進行分組,並顯示每個分組的數量

---mysql---

select cat_id,count(1) from goods group by cat_id order by cat_id;

---mongo---

db.goods.group({

key:{cat_id:1},

cond:{},

reduce:function(curr,res){res.cnt+=1},

initial:{cnt:0},

});

========= ==where price>=900====== =======================

案例2:篩選出價格大於900的數據,再根據類目cat_id進行分組,並顯示每個分組的數量

---mysql---

select cat_id,count(1) from goods where price>=900 group by cat_id;

---mongo---

db.goods.group({

key:{cat_id:1},

cond:{price:{$gte:900}},

reduce:function(curr,res){res.cnt+=1},

initial:{cnt:0},

});

=========== =====sum(price)===== ===========================

案例3:根據cat_id分組,展示每個分組下總價格

---mysql---

select sum(price) from goods group by cat_id;

---mongo---

db.goods.group({

key:{cat_id:1},

cond:{},

reduce:function(curr,res){res.totalPrice += curr.price},

initial:{totalPrice:0}

});

=================max(price)===== ==========================

案例4:根據cat_id分組,展示每個分組下價格最高的記錄

---mysql---

select cat_id,max(price) from goods group by cat_id;

---mongo---

db.goods.group({

key:{cat_id:0},

cond:{},

reduce:function(curr,res){

if(curr.price > res.maxPrice)

res.maxPrice=curr.price

},

initial:{maxPrice:0}

});

======== =====avg(price)===== ============================

案例5:根據cat_id分組,展示每個分組的平均價格

---mysql---

select cat_id,avg(price) from goods group by cat_id;

---mongo---

db.goods.group({

key:{cat_id:1},

cond:{},

reduce:function(curr,res){

res.sumPrice+=curr.price;

res.cnt+=1;},

initial:{sumPrice:0,cnt:0},

finalize:function(res){res.avg = res.sumPrice/res.cnt;},

});

============================================================

tips:

1,group需要手寫聚合函數

2,group 不支持分片、集羣,不支持分佈式計算

3,分佈式:aggregate(),mapReduce()













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章