Change Dir

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

          統(tǒng)計

          留言簿(18)

          積分與排名

          “牛”們的博客

          各個公司技術(shù)

          我的鏈接

          淘寶技術(shù)

          閱讀排行榜

          評論排行榜

          Leetcode-Database-178-Rank Scores-Medium

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

           

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

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

           

           

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

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

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

           

           

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

           

          實(shí)現(xiàn)代碼如下:

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

          評論

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

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

          主站蜘蛛池模板: 吴旗县| 高青县| 山东省| 民权县| 林甸县| 庄浪县| 晋江市| 屯门区| 安丘市| 兴业县| 汉中市| 正宁县| 海晏县| 大姚县| 寻甸| 鄂伦春自治旗| 武陟县| 平远县| 东方市| 汝阳县| 安丘市| 游戏| 当雄县| 会同县| 沈阳市| 泽普县| 江陵县| 黑龙江省| 彩票| 黎川县| 米林县| 屏边| 莆田市| 道孚县| 玉树县| 张家口市| 沁阳市| 介休市| 淮安市| 邵武市| 尤溪县|