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?改一下吧。  回復  更多評論   

          主站蜘蛛池模板: 汤阴县| 阳信县| 青州市| 青田县| 马关县| 神池县| 盐源县| 濮阳市| 成武县| 长葛市| 巫山县| 香格里拉县| 成安县| 河曲县| 新巴尔虎右旗| 墨竹工卡县| 碌曲县| 威信县| 临邑县| 通榆县| 板桥市| 色达县| 贵溪市| 东乡县| 湟中县| 醴陵市| 高清| 衡阳市| 叶城县| 克山县| 清镇市| 即墨市| 阿坝县| 海兴县| 通化县| 福鼎市| 南靖县| 株洲县| 濮阳市| 汝州市| 怀集县|