zoukankan      html  css  js  c++  java
  • Hive sql 查询数据库查询 top-n

    数据库查询*分组排序取top n
    要求:按照课程分组,查找每个课程最高的两个成绩。

    数据文件如下:

    第一列no为学号,第二列course为课程,第三列score为分数

    mysql> select * from lesson;
    +-------+---------+-------+
    | no | course | score |
    +-------+---------+-------+
    | N0101 | Marth | 100 |
    | N0102 | English | 12 |
    | N0102 | Chinese | 55 |
    | N0102 | History | 58 |
    | N0102 | Marth | 25 |
    | N0103 | English | 100 |
    | N0103 | Chinese | 87 |
    | N0103 | History | 88 |
    | N0103 | Marth | 72 |
    | N0104 | English | 20 |
    | N0104 | Chinese | 60 |
    | N0104 | History | 88 |
    | N0104 | Marth | 56 |
    | N0105 | English | 56 |
    | N0105 | Chinese | 88 |
    | N0105 | History | 88 |
    | N0201 | English | 66 |
    | N0201 | Chinese | 77 |
    | N0201 | History | 80 |
    | N0201 | Marth | 100 |
    | N0202 | English | 35 |
    | N0202 | Chinese | 56 |
    | N0202 | History | 86 |
    | N0202 | Marth | 99 |
    | N0203 | English | 100 |
    | N0203 | Chinese | 87 |
    | N0203 | History | 88 |
    | N0203 | Marth | 57 |
    | N0204 | English | 98 |
    | N0204 | Chinese | 100 |
    | N0204 | History | 66 |
    | N0204 | Marth | 71 |
    | N0205 | English | 98 |
    | N0205 | Chinese | 100 |
    | N0205 | History | 66 |
    | N0205 | Marth | 71 |
    | N0301 | English | 66 |
    | N0301 | Chinese | 89 |
    | N0301 | History | 68 |
    | N0301 | Marth | 83 |
    | N0302 | English | 76 |
    | N0302 | Chinese | 99 |
    | N0302 | History | 80 |
    | N0302 | Marth | 74 |
    | N0303 | English | 100 |
    | N0303 | Chinese | 100 |
    | N0303 | History | 88 |
    | N0303 | Marth | 57 |
    | N0304 | English | 76 |
    | N0304 | Chinese | 100 |
    | N0304 | History | 66 |
    | N0304 | Marth | 86 |
    | N0305 | English | 98 |
    | N0305 | Chinese | 100 |
    | N0305 | History | 40 |
    | N0305 | Marth | 59 |
    | N0306 | English | 52 |
    | N0306 | Chinese | 87 |
    | N0306 | History | 72 |
    | N0306 | Marth | 71 |
    | N0101 | Chinese | 55 |
    | N0101 | History | 84 |
    | N0101 | English | 82 |
    | N0101 | English | 82 |
    +-------+---------+-------+
    64 rows in set

    在hive上查询

    select a.course,a.score
    from
    (
    select course,score,row_number() over(partition by course order by score desc) as n
    from lesson
    )a
    where a.n<=2;
    

      

    其中:
    row_number() over(partition by course order by score desc)
    意思是以课程分组,按成绩递减排序,并为每组中的数据打上行号的标记,从1开始。
    这样,再在外层套一层过滤行号小于等于2的即可:-D


    原文:https://blog.csdn.net/wguangliang/article/details/50167283

  • 相关阅读:
    二维码登录网页版微信的实现方式分析
    扒取网站内容(后台方法和前台方法的两种实现)
    网站基本架构模式以及优化方案
    JS 日期对象在浏览器间的若干差异
    Web Farm 和Web Garden
    邓白氏申请和查询
    Xcode 真机调试报错:This application's application-identifier entitleme
    libc++abi.dylib`__cxa_throw: 使用[AVAudioPlayer play]会产生__cxa_throw异常
    ios 瀑布流的那些事情
    ios UIImage 圆形图片剪切方案
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/10233356.html
Copyright © 2011-2022 走看看