国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

得到每個分組里的最大最小記錄 Mongo VS Mysql

gekylin / 1750人閱讀

摘要:統計每個分組里的最大最小記錄實現完整見需求得到每個擁有最多人口的城市和擁有最小人口的城市以及對應的人口數效果見實現相比的直觀就要繞很多了方案一需要設置一個較大值默認的還不夠用參考方案二每個分組里面分別按升序降序排序人為分配一個序號均取序號

統計每個分組里的最大最小記錄 mongo實現
{
     "_id" : "01001",
     "city" : "AGAWAM",
     "pop" : 15338,
     "state" : "MA"
}

完整json見: http://media.mongodb.org/zips...

需求

得到每個state擁有最多人口的城市和擁有最小人口的城市以及對應的人口數

db.zipcodes.aggregate(
    {$group: {_id:{state:"$state",city:"$city"}, popPerCity:{$sum:"$pop"} } },
    {$sort: {popPerCity:1} },
    {$group: {
        _id:"$_id.state",
        biggestCity:{$last:"$_id.city"},
        biggestPop: {$last:"$popPerCity"},
        smallestCity: {$first:"$_id.city"},
        smallestPop: {$first:"$popPerCity"}
    }}
)

效果

{ "_id" : "DE", "biggestCity" : "NEWARK", "biggestPop" : 111674, "smallestCity" : "BETHEL", "smallestPop" : 108 }
{ "_id" : "MS", "biggestCity" : "JACKSON", "biggestPop" : 204788, "smallestCity" : "CHUNKY", "smallestPop" : 79 }
...

見: https://docs.mongodb.com/manu...

Mysql實現

相比mongo的直觀 就要繞很多了

方案一
# 需要設置一個較大值 默認的1024還不夠用
SET SESSION group_concat_max_len = 20480;

select state, substring_index(group_concat(city order by pop ),",",1) smallestCity, min(pop),substring_index(group_concat(city order by pop ),",",-1) biggestCity,  max(pop) from  (select state, city, sum(pop) pop from zipcode group by state, city) a group by state ;

參考

https://dev.mysql.com/doc/ref...
https://dev.mysql.com/doc/ref...

方案二
# 每個state分組里面分別按pop升序、降序排序 人為分配一個序號 均取序號一就得到了該分組的起止記錄

select b.state, b.city smallestCity, b.pop smallestPop, c.city biggestCity, c.pop biggestPop from
( select state,city,pop,@rank:=if(@current_state=state, @rank+1, 1) rank, @current_state:=state from
(select state, city, sum(pop) pop from zipcode group by state, city) a,
(select @current_state:=NULL, @rank:=NULL) vars
order by a.state,a.pop
) b ,
( select state,city,pop,@rank:=if(@current_state=state, @rank+1, 1) rank, @current_state:=state from
(select state, city, sum(pop) pop from zipcode group by state, city) a,
(select @current_state:=NULL, @rank:=NULL) vars
order by a.state,a.pop desc
) c
where b.state = c.state and b.rank = 1 and c.rank = 1
補充

建表語句

CREATE TABLE `zipcode` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `zipcode` varchar(10) NOT NULL,
  `city` varchar(30) NOT NULL,
  `pop` int(11) NOT NULL,
  `state` varchar(5) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `zipcode` (`zipcode`),
  KEY `idx_state_city` (`state`,`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

json ==> batch insert sql

jq -c "[._id, .city, .pop, .state]" zips.json | sed "s/[(.*)]$/1/" | awk -F, "{print "insert into zipcode select null," $1"," $2","$3","$4";"}" 

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19020.html

相關文章

  • 「譯」 MapReduce in MongoDB

    摘要:在第行中,我們會從集合取得結果并顯示它。的邏輯在中,我們要以性別作為,然后以作為。年齡是用來做計算用的,而名字只是用來顯示給人看的。我們要檢查所有和性別相關的年齡,找到年齡最大和最小的用戶。 在這篇文章里面,我們會演示如何在 MongoDB 中使用 MapReduce 操作。我們會用 dummy-json 這個包來生成一些虛假的數據,然后用 Mongojs 如果想要快速看到結果,可以到...

    ConardLi 評論0 收藏0
  • Mongo語法總結

    摘要:先進行過濾,再分組實例解釋進行過濾,這里利用兩個字段進行過濾。聚合操作可以對分組的數據執行如下的表達式計算計算總和。根據分組,獲取集合中所有文檔對應值得最大值。將指定的表達式的值添加到一個數組中。 先進行過濾,再分組 1、實例: db.getCollection(UpMsgItem).aggregate( [ {$match : { createTime : {$gt : ...

    shmily 評論0 收藏0
  • JavaScript 數據結構與算法之美 - 桶排序、計數排序、基數排序

    摘要:之所以把計數排序桶排序基數排序放在一起比較,是因為它們的平均時間復雜度都為。動畫計數排序思想找出待排序的數組中最大和最小的元素。桶排序計數排序能派上用場嗎手機號碼有位,范圍太大,顯然不適合用這兩種排序算法。 showImg(https://segmentfault.com/img/bVbuF9e?w=900&h=500); 1. 前言 算法為王。 想學好前端,先練好內功,只有內功深厚者...

    Awbeci 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<