Change Dir

          先知cd——熱愛生活是一切藝術的開始

          統計

          留言簿(18)

          積分與排名

          “牛”們的博客

          各個公司技術

          我的鏈接

          淘寶技術

          閱讀排行榜

          評論排行榜

          Leetcode-Database-178-Rank Scores-Medium

          題目地址:https://oj.leetcode.com/problems/rank-scores/

           

          這個問題很有趣,寫一個類似oracle里的窗口函數rank(),具體描述一下,有一張數據表Scores,里面有兩個字段IdScore,具體結構如下:

          +----+-------+
          | Id | Score |
          +----+-------+
          | 1  | 3.50  |
          | 2  | 3.65  |
          | 3  | 4.00  |
          | 4  | 3.85  |
          | 5  | 4.00  |
          | 6  | 3.65  |
          +----+-------+

           

           

          任務是要寫一個sql來給Score字段打一個rank標識,條件是按照Score從大到小排序,相等情況時rank相同,且rank之間沒有“洞”,即rank字段是連續值。顯然這個任務比rank窗口函數容易一些,但是也是一個棘手的問題。

          題目具體給出了輸出示例:

          +-------+------+
          | Score | Rank |
          +-------+------+
          | 4.00  | 1    |
          | 4.00  | 1    |
          | 3.85  | 2    |
          |
           3.65  | 3    |
          | 3.65  | 3    |
          | 3.50  | 4    |
          +-------+------+

           

           

          平常說實話rank函數或者row_number函數用多了,很少考慮實現,面對這個問題,硬著頭皮用笛卡爾積的join解決了,若是在hive中,strict模式可能拒絕笛卡爾積的join,這時還是求助于窗口函數rank~~

           

          實現代碼如下:

          select
          o1.Score
          ,count(o2.Score) as Rank
          from(
          select * from Scores
          )o1
          left outer join(
          select distinct Score from Scores
          )o2
          on(o1.Score<=o2.Score)
          group by
          o1.Id
          order by o1.Score desc

           

          posted on 2015-01-28 16:50 changedi 閱讀(3566) 評論(1)  編輯  收藏 所屬分類: 數據

          評論

          # re: Leetcode-Database-178-Rank Scores-Medium 2015-01-29 21:37 京山游俠

          你的博客頁面打開好慢啊。是不是引用了不該引用的JavaScript?改一下吧。  回復  更多評論   

          主站蜘蛛池模板: 景宁| 乐平市| 卢氏县| 云阳县| 隆回县| 宣威市| 承德县| 启东市| 扶绥县| 凤冈县| 长海县| 锡林郭勒盟| 德清县| 固始县| 广州市| 砚山县| 琼海市| 那坡县| 新邵县| 东阿县| 通州市| 博湖县| 买车| 云龙县| 阆中市| 庆安县| 永寿县| 蒲江县| 喀喇沁旗| 肃北| 修武县| 元氏县| 合水县| 九江市| 咸阳市| 鄂伦春自治旗| 汝州市| 黄龙县| 土默特左旗| 故城县| 静安区|