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 閱讀(3567) 評論(1)  編輯  收藏 所屬分類: 數據

          評論

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

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

          主站蜘蛛池模板: 潮安县| 勃利县| 左云县| 保靖县| 广河县| 将乐县| 海晏县| 临汾市| 丰城市| 武平县| 兴山县| 郸城县| 荆门市| 肥东县| 海伦市| 深州市| 泽库县| 南充市| 岑溪市| 仙游县| 静安区| 西昌市| 汕头市| 哈巴河县| 临西县| 自贡市| 吉安县| 嘉黎县| 邢台县| 宁国市| 富宁县| 阳曲县| 营口市| 双流县| 兴文县| 彰化市| 陈巴尔虎旗| 二连浩特市| 黔江区| 庆城县| 滦南县|