SQL-第一题:聚合函数形式的题
先讨论一下最基础的东西在hivesql里,比较晦涩,但是真的很好用哦。
1 | 谈谈个人理解: |
1 | 我们为什么要聚合呢? |
1 | 首先我的name,score 在groupby的时候我不知道取哪一个, |
案例1 :【聚合函数形式的题】
1 | eg:求每一个班级得分最高的学生得姓名+分数+班级? |
1 | 开窗函数:就是1对多 ,1就是partition by 谁 ,产生了多个数(产生了一个新列存这多个数) |
1 | 1.group by + join |
1 | 2.开窗函数 |
开窗函数里不止只有Rank()函数可用 ,它有很多哈
SQL题01
先讲思路–>再演示结果
1 | SQL1: ods_domain_traffic_info这个表 |
1 | 思路: |
1 | 我写sql思路过程: |
1 | 结果演示: |
1 | 0: jdbc:hive2://hadoop101:10000> select |
1 | 2.目的是totals 生成了一个新列(1对多) 用开窗函数 ,以domain分组以month排序 之后用sum |
1 | 0: jdbc:hive2://hadoop101:10000> select |
1 | 也可以这样的 :不生成新的列: |
SQL2
1 | SQL2: |
1 | 思路: |
1 | 结果展示: 因为我就造了3个pid abc 100个user |
1 | (2)统计每个产品top3的用户信息 ==> pid uid cnt |
1 | step1:每个pid 每个uid 的 访问次数 |
1 | step2: 基于step1 pid,uid,count 取出 top3 |
1 | step 3:基于2 进行where rank <= 3 |
1 | step1 演示; 每个pid 每个uid 的 访问次数 |
1 | step2:目的 Top3 =》 基于1 要以pid进行分组以count 进行排序 生成新的列 rank |
1 | step3 基于2 进行where rank <= 3 |
1 | 结果: |
1 | 带上排名 看的更清楚: |