hive高级查询(2)
-- 分组查询
 SELECT sex,SUM(mark) sum_mark
 FROM score
 GROUP BY sex
 HAVING sum_mark > 555;
SELECT sex,sum_mark
 FROM(
     SELECT sex,SUM(mark) sum_mark
     FROM score
     GROUP BY sex
 ) t
 WHERE sum_mark > 555;
SELECT AVG(gid),SUM(gid)/COUNT(gid) FROM student;
 SELECT COUNT(gid),COUNT(DISTINCT gid) FROM student;
 SELECT collect_list(gid),collect_set(gid) FROM student;
 +------------+--------+--+
 |    _c0     |  _c1   |
 +------------+--------+--+
 | [1,1,2,2]  | [1,2]  |
 +------------+--------+--+
 SELECT collect_list(gid),collect_list(DISTINCT gid) FROM student;结果同上
-- 窗口排名函数
 SELECT *,
     ROW_NUMBER() OVER(ORDER BY id) rn
 FROM score;
 +-----------+-------------+------------+-------------+-----+--+
 | score.id  | score.name  | score.sex  | score.mark  | rn  |
 +-----------+-------------+------------+-------------+-----+--+
 | 1         | a           | male       | 99.0        | 1   |
 | 2         | b           | female     | 87.0        | 2   |
 | 3         | c           | male       | 68.0        | 3   |
 | 4         | d           | female     | 54.0        | 4   |
 | 5         | e           | male       | 93.0        | 5   |
 | 6         | f           | female     | 46.0        | 6   |
 | 7         | g           | male       | 50.0        | 7   |
 | 8         | h           | female     | 88.0        | 8   |
 | 9         | i           | male       | 75.0        | 9   |
 | 10        | j           | male       | 72.0        | 10  |
 | 11        | k           | female     | 100.0       | 11  |
 | 12        | l           | female     | 88.0        | 12  |
 | 13        | m           | male       | 99.0        | 13  |
 | 14        | n           | female     | NULL        | 14  |
 | 15        | o           | male       | NULL        | 15  |
 | 16        | p           | female     | 88.0        | 16  |
 +-----------+-------------+------------+-------------+-----+--+
SELECT *,
     rank() OVER(ORDER BY mark desc) rn
 FROM score;
 +-----------+-------------+------------+-------------+-----+--+
 | score.id  | score.name  | score.sex  | score.mark  | rn  |
 +-----------+-------------+------------+-------------+-----+--+
 | 11        | k           | female     | 100.0       | 1   |
 | 1         | a           | male       | 99.0        | 2   |
 | 13        | m           | male       | 99.0        | 2   |
 | 5         | e           | male       | 93.0        | 4   |
 | 16        | p           | female     | 88.0        | 5   |
 | 12        | l           | female     | 88.0        | 5   |
 | 8         | h           | female     | 88.0        | 5   |
 | 2         | b           | female     | 87.0        | 8   |
 | 9         | i           | male       | 75.0        | 9   |
 | 10        | j           | male       | 72.0        | 10  |
 | 3         | c           | male       | 68.0        | 11  |
 | 4         | d           | female     | 54.0        | 12  |
 | 7         | g           | male       | 50.0        | 13  |
 | 6         | f           | female     | 46.0        | 14  |
 | 14        | n           | female     | NULL        | 15  |
 | 15        | o           | male       | NULL        | 15  |
 +-----------+-------------+------------+-------------+-----+--+
SELECT *,
     dense_rank() OVER(ORDER BY mark desc) rn
 FROM score;
 +-----------+-------------+------------+-------------+-----+--+
 | score.id  | score.name  | score.sex  | score.mark  | rn  |
 +-----------+-------------+------------+-------------+-----+--+
 | 11        | k           | female     | 100.0       | 1   |
 | 1         | a           | male       | 99.0        | 2   |
 | 13        | m           | male       | 99.0        | 2   |
 | 5         | e           | male       | 93.0        | 3   |
 | 16        | p           | female     | 88.0        | 4   |
 | 12        | l           | female     | 88.0        | 4   |
 | 8         | h           | female     | 88.0        | 4   |
 | 2         | b           | female     | 87.0        | 5   |
 | 9         | i           | male       | 75.0        | 6   |
 | 10        | j           | male       | 72.0        | 7   |
 | 3         | c           | male       | 68.0        | 8   |
 | 4         | d           | female     | 54.0        | 9   |
 | 7         | g           | male       | 50.0        | 10  |
 | 6         | f           | female     | 46.0        | 11  |
 | 14        | n           | female     | NULL        | 12  |
 | 15        | o           | male       | NULL        | 12  |
 +-----------+-------------+------------+-------------+-----+--+
SELECT *,
     ROW_NUMBER() OVER(PARTITION BY sex ORDER BY id) rn
 FROM score;
 +-----------+-------------+------------+-------------+-----+--+
 | score.id  | score.name  | score.sex  | score.mark  | rn  |
 +-----------+-------------+------------+-------------+-----+--+
 | 2         | b           | female     | 87.0        | 1   |
 | 4         | d           | female     | 54.0        | 2   |
 | 6         | f           | female     | 46.0        | 3   |
 | 8         | h           | female     | 88.0        | 4   |
 | 11        | k           | female     | 100.0       | 5   |
 | 12        | l           | female     | 88.0        | 6   |
 | 14        | n           | female     | NULL        | 7   |
 | 16        | p           | female     | 88.0        | 8   |
 | 1         | a           | male       | 99.0        | 1   |
 | 3         | c           | male       | 68.0        | 2   |
 | 5         | e           | male       | 93.0        | 3   |
 | 7         | g           | male       | 50.0        | 4   |
 | 9         | i           | male       | 75.0        | 5   |
 | 10        | j           | male       | 72.0        | 6   |
 | 13        | m           | male       | 99.0        | 7   |
 | 15        | o           | male       | NULL        | 8   |
 +-----------+-------------+------------+-------------+-----+--+
SELECT *,
     rank() OVER(PARTITION BY sex ORDER BY mark desc) rn
 FROM score;
 +-----------+-------------+------------+-------------+-----+--+
 | score.id  | score.name  | score.sex  | score.mark  | rn  |
 +-----------+-------------+------------+-------------+-----+--+
 | 11        | k           | female     | 100.0       | 1   |
 | 16        | p           | female     | 88.0        | 2   |
 | 12        | l           | female     | 88.0        | 2   |
 | 8         | h           | female     | 88.0        | 2   |
 | 2         | b           | female     | 87.0        | 5   |
 | 4         | d           | female     | 54.0        | 6   |
 | 6         | f           | female     | 46.0        | 7   |
 | 14        | n           | female     | NULL        | 8   |
 | 1         | a           | male       | 99.0        | 1   |
 | 13        | m           | male       | 99.0        | 1   |
 | 5         | e           | male       | 93.0        | 3   |
 | 9         | i           | male       | 75.0        | 4   |
 | 10        | j           | male       | 72.0        | 5   |
 | 3         | c           | male       | 68.0        | 6   |
 | 7         | g           | male       | 50.0        | 7   |
 | 15        | o           | male       | NULL        | 8   |
 +-----------+-------------+------------+-------------+-----+--+
SELECT *,
     dense_rank() OVER(PARTITION BY sex ORDER BY mark desc) rn
 FROM score;
 +-----------+-------------+------------+-------------+-----+--+
 | score.id  | score.name  | score.sex  | score.mark  | rn  |
 +-----------+-------------+------------+-------------+-----+--+
 | 11        | k           | female     | 100.0       | 1   |
 | 16        | p           | female     | 88.0        | 2   |
 | 12        | l           | female     | 88.0        | 2   |
 | 8         | h           | female     | 88.0        | 2   |
 | 2         | b           | female     | 87.0        | 3   |
 | 4         | d           | female     | 54.0        | 4   |
 | 6         | f           | female     | 46.0        | 5   |
 | 14        | n           | female     | NULL        | 6   |
 | 1         | a           | male       | 99.0        | 1   |
 | 13        | m           | male       | 99.0        | 1   |
 | 5         | e           | male       | 93.0        | 2   |
 | 9         | i           | male       | 75.0        | 3   |
 | 10        | j           | male       | 72.0        | 4   |
 | 3         | c           | male       | 68.0        | 5   |
 | 7         | g           | male       | 50.0        | 6   |
 | 15        | o           | male       | NULL        | 7   |
 +-----------+-------------+------------+-------------+-----+--+
-- 总结:
 ROW_NUMBER() 按行定序,[1,2,3]
 RANK()       按值定序,[1,1,3]
 DENSE_RANK() 按值定序,[1,1,2]
 -- 用法:
 ROW_NUMBER() OVER(PARTITION BY ),仅分区后排名,用得少
 ROW_NUMBER() OVER(ORDER BY ),全窗口排序后排名,用得少
 ROW_NUMBER() OVER(PARTITION BY ORDER BY ),先分组,再排序,最后排名
 【注:以上用法适用于三种排名函数】
 partition BY 定义窗口大小为分组大小,否则窗口大小为全表大小
-- 窗口聚合函数
 SELECT *,
     COUNT(*) OVER(PARTITION BY sex)
 FROM score;
 +-----------+-------------+------------+-------------+---------+--+
 | score.id  | score.name  | score.sex  | score.mark  | _wcol0  |
 +-----------+-------------+------------+-------------+---------+--+
 | 16        | p           | female     | 88.0        | 8       |
 | 14        | n           | female     | NULL        | 8       |
 | 12        | l           | female     | 88.0        | 8       |
 | 11        | k           | female     | 100.0       | 8       |
 | 8         | h           | female     | 88.0        | 8       |
 | 6         | f           | female     | 46.0        | 8       |
 | 4         | d           | female     | 54.0        | 8       |
 | 2         | b           | female     | 87.0        | 8       |
 | 1         | a           | male       | 99.0        | 8       |
 | 15        | o           | male       | NULL        | 8       |
 | 7         | g           | male       | 50.0        | 8       |
 | 13        | m           | male       | 99.0        | 8       |
 | 3         | c           | male       | 68.0        | 8       |
 | 5         | e           | male       | 93.0        | 8       |
 | 10        | j           | male       | 72.0        | 8       |
 | 9         | i           | male       | 75.0        | 8       |
 +-----------+-------------+------------+-------------+---------+--+
SELECT *,
     MAX(mark) OVER(PARTITION BY sex) max_mark,
     MIN(mark) OVER(PARTITION BY sex) min_mark
 FROM score
 WHERE mark IS NOT null;
 +-----------+-------------+------------+-------------+-----------+-----------+--+
 | score.id  | score.name  | score.sex  | score.mark  | max_mark  | min_mark  |
 +-----------+-------------+------------+-------------+-----------+-----------+--+
 | 16        | p           | female     | 88.0        | 100.0     | 46.0      |
 | 6         | f           | female     | 46.0        | 100.0     | 46.0      |
 | 12        | l           | female     | 88.0        | 100.0     | 46.0      |
 | 4         | d           | female     | 54.0        | 100.0     | 46.0      |
 | 11        | k           | female     | 100.0       | 100.0     | 46.0      |
 | 2         | b           | female     | 87.0        | 100.0     | 46.0      |
 | 8         | h           | female     | 88.0        | 100.0     | 46.0      |
 | 7         | g           | male       | 50.0        | 99.0      | 50.0      |
 | 13        | m           | male       | 99.0        | 99.0      | 50.0      |
 | 10        | j           | male       | 72.0        | 99.0      | 50.0      |
 | 9         | i           | male       | 75.0        | 99.0      | 50.0      |
 | 5         | e           | male       | 93.0        | 99.0      | 50.0      |
 | 3         | c           | male       | 68.0        | 99.0      | 50.0      |
 | 1         | a           | male       | 99.0        | 99.0      | 50.0      |
 +-----------+-------------+------------+-------------+-----------+-----------+--+
SELECT *,
     SUM(mark) OVER(PARTITION BY sex) sum_mark,
     AVG(mark) OVER(PARTITION BY sex) avg_mark
 FROM score;
 +-----------+-------------+------------+-------------+-----------+--------------------+--+
 | score.id  | score.name  | score.sex  | score.mark  | sum_mark  |      avg_mark      |
 +-----------+-------------+------------+-------------+-----------+--------------------+--+
 | 16        | p           | female     | 88.0        | 551.0     | 78.71428571428571  |
 | 14        | n           | female     | NULL        | 551.0     | 78.71428571428571  |
 | 12        | l           | female     | 88.0        | 551.0     | 78.71428571428571  |
 | 11        | k           | female     | 100.0       | 551.0     | 78.71428571428571  |
 | 8         | h           | female     | 88.0        | 551.0     | 78.71428571428571  |
 | 6         | f           | female     | 46.0        | 551.0     | 78.71428571428571  |
 | 4         | d           | female     | 54.0        | 551.0     | 78.71428571428571  |
 | 2         | b           | female     | 87.0        | 551.0     | 78.71428571428571  |
 | 1         | a           | male       | 99.0        | 556.0     | 79.42857142857143  |
 | 15        | o           | male       | NULL        | 556.0     | 79.42857142857143  |
 | 7         | g           | male       | 50.0        | 556.0     | 79.42857142857143  |
 | 13        | m           | male       | 99.0        | 556.0     | 79.42857142857143  |
 | 3         | c           | male       | 68.0        | 556.0     | 79.42857142857143  |
 | 5         | e           | male       | 93.0        | 556.0     | 79.42857142857143  |
 | 10        | j           | male       | 72.0        | 556.0     | 79.42857142857143  |
 | 9         | i           | male       | 75.0        | 556.0     | 79.42857142857143  |
 +-----------+-------------+------------+-------------+-----------+--------------------+--+
SELECT *,
     SUM(mark) OVER(ORDER BY mark) sum_mark
 FROM score;
 -- 窗口自上而下自动变化,遇到相同值时视为一组同时计算,窗口范围从表首行到表末行,计算范围从表首行到当前行
 +-----------+-------------+------------+-------------+-----------+--+
 | score.id  | score.name  | score.sex  | score.mark  | sum_mark  |
 +-----------+-------------+------------+-------------+-----------+--+
 | 15        | o           | male       | NULL        | NULL      |
 | 14        | n           | female     | NULL        | NULL      |
 | 6         | f           | female     | 46.0        | 46.0      |
 | 7         | g           | male       | 50.0        | 96.0      |
 | 4         | d           | female     | 54.0        | 150.0     |
 | 3         | c           | male       | 68.0        | 218.0     |
 | 10        | j           | male       | 72.0        | 290.0     |
 | 9         | i           | male       | 75.0        | 365.0     |
 | 2         | b           | female     | 87.0        | 452.0     |
 | 16        | p           | female     | 88.0        | 716.0     |
 | 12        | l           | female     | 88.0        | 716.0     |
 | 8         | h           | female     | 88.0        | 716.0     |
 | 5         | e           | male       | 93.0        | 809.0     |
 | 13        | m           | male       | 99.0        | 1007.0    |
 | 1         | a           | male       | 99.0        | 1007.0    |
 | 11        | k           | female     | 100.0       | 1107.0    |
 +-----------+-------------+------------+-------------+-----------+--+
SELECT *,
     SUM(mark) OVER(PARTITION BY sex ORDER BY mark) sum_mark
 FROM score;
 -- 如果分组则窗口边界是从组的第一行到组的最后一行
 -- 如果不分组则窗口边界是从表的第一行到表的最后一行
 +-----------+-------------+------------+-------------+-----------+--+
 | score.id  | score.name  | score.sex  | score.mark  | sum_mark  |
 +-----------+-------------+------------+-------------+-----------+--+
 | 14        | n           | female     | NULL        | NULL      |
 | 6         | f           | female     | 46.0        | 46.0      |
 | 4         | d           | female     | 54.0        | 100.0     |
 | 2         | b           | female     | 87.0        | 187.0     |
 | 16        | p           | female     | 88.0        | 451.0     |
 | 12        | l           | female     | 88.0        | 451.0     |
 | 8         | h           | female     | 88.0        | 451.0     |
 | 11        | k           | female     | 100.0       | 551.0     |
 | 15        | o           | male       | NULL        | NULL      |
 | 7         | g           | male       | 50.0        | 50.0      |
 | 3         | c           | male       | 68.0        | 118.0     |
 | 10        | j           | male       | 72.0        | 190.0     |
 | 9         | i           | male       | 75.0        | 265.0     |
 | 5         | e           | male       | 93.0        | 358.0     |
 | 1         | a           | male       | 99.0        | 556.0     |
 | 13        | m           | male       | 99.0        | 556.0     |
 +-----------+-------------+------------+-------------+-----------+--+
-- 窗口分析函数
 SELECT *,
     LEAD(mark,2,0) OVER(PARTITION BY sex ORDER BY mark) lead,
     LAG(mark,2,0) OVER(PARTITION BY sex ORDER BY mark) lag
 FROM score;
 -- 说明:
 -- 第一个参数指定要取哪个字段的值
 -- 第二个参数指定向上或向下跳过几行(默认值是1)
 -- 第三个参数指定当值为null时替代的默认值(默认值是null)
 +-----------+-------------+------------+-------------+--------+-------+--+
 | score.id  | score.name  | score.sex  | score.mark  |  lead  |  lag  |
 +-----------+-------------+------------+-------------+--------+-------+--+
 | 14        | n           | female     | NULL        | 54.0   | 0.0   |
 | 6         | f           | female     | 46.0        | 87.0   | 0.0   |
 | 4         | d           | female     | 54.0        | 88.0   | NULL  |
 | 2         | b           | female     | 87.0        | 88.0   | 46.0  |
 | 16        | p           | female     | 88.0        | 88.0   | 54.0  |
 | 12        | l           | female     | 88.0        | 100.0  | 87.0  |
 | 8         | h           | female     | 88.0        | 0.0    | 88.0  |
 | 11        | k           | female     | 100.0       | 0.0    | 88.0  |
 | 15        | o           | male       | NULL        | 68.0   | 0.0   |
 | 7         | g           | male       | 50.0        | 72.0   | 0.0   |
 | 3         | c           | male       | 68.0        | 75.0   | NULL  |
 | 10        | j           | male       | 72.0        | 93.0   | 50.0  |
 | 9         | i           | male       | 75.0        | 99.0   | 68.0  |
 | 5         | e           | male       | 93.0        | 99.0   | 72.0  |
 | 1         | a           | male       | 99.0        | 0.0    | 75.0  |
 | 13        | m           | male       | 99.0        | 0.0    | 93.0  |
 +-----------+-------------+------------+-------------+--------+-------+--+
SELECT *,
     FIRST_VALUE(mark,true) OVER(partition BY sex ORDER BY mark desc) first,
     LAST_VALUE(mark,true) OVER(partition BY sex ORDER BY mark desc) last
 FROM score;
 -- 说明
 -- 第一个参数指定要取哪个字段的值
 -- 第二个参数指定是否跳过null值(默认值是false)
 +-----------+-------------+------------+-------------+--------+--------+--+
 | score.id  | score.name  | score.sex  | score.mark  | first  |  last  |
 +-----------+-------------+------------+-------------+--------+--------+--+
 | 11        | k           | female     | 100.0       | 100.0  | 100.0  |
 | 16        | p           | female     | 88.0        | 100.0  | 88.0   |
 | 12        | l           | female     | 88.0        | 100.0  | 88.0   |
 | 8         | h           | female     | 88.0        | 100.0  | 88.0   |
 | 2         | b           | female     | 87.0        | 100.0  | 87.0   |
 | 4         | d           | female     | 54.0        | 100.0  | 54.0   |
 | 6         | f           | female     | 46.0        | 100.0  | 46.0   |
 | 14        | n           | female     | NULL        | 100.0  | 46.0   |
 | 1         | a           | male       | 99.0        | 99.0   | 99.0   |
 | 13        | m           | male       | 99.0        | 99.0   | 99.0   |
 | 5         | e           | male       | 93.0        | 99.0   | 93.0   |
 | 9         | i           | male       | 75.0        | 99.0   | 75.0   |
 | 10        | j           | male       | 72.0        | 99.0   | 72.0   |
 | 3         | c           | male       | 68.0        | 99.0   | 68.0   |
 | 7         | g           | male       | 50.0        | 99.0   | 50.0   |
 | 15        | o           | male       | NULL        | 99.0   | 50.0   |
 +-----------+-------------+------------+-------------+--------+--------+--+
-- 思路:分组 -> 排序 -> 计算【排名,聚合,分析】
 -- 排名 -> row_number(),rank(),dense_rank()
 -- 聚合 -> count(),max(),min(),sum(),avg()
 -- 分析 -> lead(),lag(),first_value(),last_value()
-- window子句分为两类:行,值范围,不支持使用的函数包括:row_number(),rank(),dense_rank(),lead(),lag()
SELECT *,
     MAX(mark) OVER(ORDER BY mark rows BETWEEN unbounded preceding AND CURRENT row)
 FROM score;
 +-----------+-------------+------------+-------------+---------+--+
 | score.id  | score.name  | score.sex  | score.mark  | _wcol0  |
 +-----------+-------------+------------+-------------+---------+--+
 | 15        | o           | male       | NULL        | NULL    |
 | 14        | n           | female     | NULL        | NULL    |
 | 6         | f           | female     | 46.0        | 46.0    |
 | 7         | g           | male       | 50.0        | 50.0    |
 | 4         | d           | female     | 54.0        | 54.0    |
 | 3         | c           | male       | 68.0        | 68.0    |
 | 10        | j           | male       | 72.0        | 72.0    |
 | 9         | i           | male       | 75.0        | 75.0    |
 | 2         | b           | female     | 87.0        | 87.0    |
 | 16        | p           | female     | 88.0        | 88.0    |
 | 12        | l           | female     | 88.0        | 88.0    |
 | 8         | h           | female     | 88.0        | 88.0    |
 | 5         | e           | male       | 93.0        | 93.0    |
 | 13        | m           | male       | 99.0        | 99.0    |
 | 1         | a           | male       | 99.0        | 99.0    |
 | 11        | k           | female     | 100.0       | 100.0   |
 +-----------+-------------+------------+-------------+---------+--+
SELECT *,
     MAX(mark) OVER(ORDER BY mark rows BETWEEN unbounded preceding AND unbounded following)
 FROM score;
 +-----------+-------------+------------+-------------+---------+--+
 | score.id  | score.name  | score.sex  | score.mark  | _wcol0  |
 +-----------+-------------+------------+-------------+---------+--+
 | 15        | o           | male       | NULL        | 100.0   |
 | 14        | n           | female     | NULL        | 100.0   |
 | 6         | f           | female     | 46.0        | 100.0   |
 | 7         | g           | male       | 50.0        | 100.0   |
 | 4         | d           | female     | 54.0        | 100.0   |
 | 3         | c           | male       | 68.0        | 100.0   |
 | 10        | j           | male       | 72.0        | 100.0   |
 | 9         | i           | male       | 75.0        | 100.0   |
 | 2         | b           | female     | 87.0        | 100.0   |
 | 16        | p           | female     | 88.0        | 100.0   |
 | 12        | l           | female     | 88.0        | 100.0   |
 | 8         | h           | female     | 88.0        | 100.0   |
 | 5         | e           | male       | 93.0        | 100.0   |
 | 13        | m           | male       | 99.0        | 100.0   |
 | 1         | a           | male       | 99.0        | 100.0   |
 | 11        | k           | female     | 100.0       | 100.0   |
 +-----------+-------------+------------+-------------+---------+--+
SELECT *,
     MAX(mark) OVER(ORDER BY mark rows BETWEEN 2 following AND 6 following)
 FROM score;
 +-----------+-------------+------------+-------------+---------+--+
 | score.id  | score.name  | score.sex  | score.mark  | _wcol0  |
 +-----------+-------------+------------+-------------+---------+--+
 | 15        | o           | male       | NULL        | 72.0    |
 | 14        | n           | female     | NULL        | 75.0    |
 | 6         | f           | female     | 46.0        | 87.0    |
 | 7         | g           | male       | 50.0        | 88.0    |
 | 4         | d           | female     | 54.0        | 88.0    |
 | 3         | c           | male       | 68.0        | 88.0    |
 | 10        | j           | male       | 72.0        | 93.0    |
 | 9         | i           | male       | 75.0        | 99.0    |
 | 2         | b           | female     | 87.0        | 99.0    |
 | 16        | p           | female     | 88.0        | 100.0   |
 | 12        | l           | female     | 88.0        | 100.0   |
 | 8         | h           | female     | 88.0        | 100.0   |
 | 5         | e           | male       | 93.0        | 100.0   |
 | 13        | m           | male       | 99.0        | 100.0   |
 | 1         | a           | male       | 99.0        | NULL    |
 | 11        | k           | female     | 100.0       | NULL    |
 +-----------+-------------+------------+-------------+---------+--+
SELECT *,
     MAX(mark) OVER(ORDER BY mark range BETWEEN 20 preceding AND 20 following)
 FROM score;
 +-----------+-------------+------------+-------------+---------+--+
 | score.id  | score.name  | score.sex  | score.mark  | _wcol0  |
 +-----------+-------------+------------+-------------+---------+--+
 | 15        | o           | male       | NULL        | NULL    |
 | 14        | n           | female     | NULL        | NULL    |
 | 6         | f           | female     | 46.0        | 54.0    |  
 | 7         | g           | male       | 50.0        | 68.0    |
 | 4         | d           | female     | 54.0        | 72.0    |
 | 3         | c           | male       | 68.0        | 88.0    |  
 | 10        | j           | male       | 72.0        | 88.0    |
 | 9         | i           | male       | 75.0        | 93.0    |  
 | 2         | b           | female     | 87.0        | 100.0   |
 | 16        | p           | female     | 88.0        | 100.0   |
 | 12        | l           | female     | 88.0        | 100.0   |
 | 8         | h           | female     | 88.0        | 100.0   |
 | 5         | e           | male       | 93.0        | 100.0   |
 | 13        | m           | male       | 99.0        | 100.0   |
 | 1         | a           | male       | 99.0        | 100.0   |
 | 11        | k           | female     | 100.0       | 100.0   |
 +-----------+-------------+------------+-------------+---------+--+
-- 取成绩前3名
 WITH t1 AS(
     SELECT *,
         DENSE_RANK() OVER(ORDER BY mark desc) dk
     FROM score
 )
 SELECT * 
 FROM t1 
 WHERE dk <=3;
SELECT * 
 FROM (
     SELECT *,
         DENSE_RANK() OVER(ORDER BY mark desc) dk
     FROM score
 )t1 
 WHERE dk <=3;
相关文章:
hive高级查询(2)
-- 分组查询 SELECT sex,SUM(mark) sum_mark FROM score GROUP BY sex HAVING sum_mark > 555; SELECT sex,sum_mark FROM( SELECT sex,SUM(mark) sum_mark FROM score GROUP BY sex ) t WHERE sum_mark > 555; SELECT AVG(gid),SUM(gid)/COUNT(gid) FROM …...
golang的jwt学习笔记
文章目录 初始化项目加密一步一步编写程序另一个参数--加密方式关于StandardClaims 解密解析出来的怎么用关于`MapClaims`上面使用结构体的全代码实战项目关于验证这个项目的前端初始化项目 自然第一步是暗转jwt-go的依赖啦 #go get github.com/golang-jwt/jwt/v5 go get githu…...
第十五节TypeScript 接口
1、简介 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要有由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。 2、接口的定义 interface interface_…...
【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口?!
【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口?!😎 前言🙌【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口?!查看自己的配置文件:最终成功访问如图所示: 总结撒花…...
14.bash shell中的for/while/until循环
文章目录 shell循环语句for命令**读取列表中的值****读取列表中的复杂值****从变量读取列表**迭代数组**从命令读取值****用通配符读取目录**C语言风格的shell for循环 shell循环while命令shell 循环的until命令shell循环跳出的break/continue命令break命令continue命令trick 欢…...
RPC(6):RMI实现RPC
1RMI简介 RMI(Remote Method Invocation) 远程方法调用。 RMI是从JDK1.2推出的功能,它可以实现在一个Java应用中可以像调用本地方法一样调用另一个服务器中Java应用(JVM)中的内容。 RMI 是Java语言的远程调用,无法实现跨语言。…...
strlen和sizeof的初步理解
大家好我是Beilef,一个美好的下我接触到编程并且逐渐喜欢。我虽然不是科班出身但是我会更加努力地去学,有啥不对的地方请斧正 文章目录 目录 文章目录 前言 想必大家对sizeof肯定很了解,那对strlen又了解多少。其实这个问题应该让不少人困扰。…...
纯CSS的华为充电动画,它来了
📢 鸿蒙专栏:想学鸿蒙的,冲 📢 C语言专栏:想学C语言的,冲 📢 VUE专栏:想学VUE的,冲这里 📢 Krpano专栏:想学Krpano的,冲 🔔…...
在架构设计中,前后端分离有什么好处?
前后端分离是一种架构设计模式,将前端和后端的开发分别独立进行,它带来了多方面的好处: 1、独立开发和维护: 前后端分离允许前端和后端开发团队独立进行工作。这意味着两个团队可以并行开发,提高了整体的开发效率。前…...
C语言中的结构体和联合体:异同及应用
文章目录 C语言中的结构体和联合体:异同及应用1. 结构体(Struct)的概述代码示例: 2. 联合体(Union)的概述代码示例: 3. 结构体与联合体的异同点相同点:不同点:代码说明 结…...
文件夹共享(普通共享和高级共享的区别)防火墙设置(包括了jdk安装和Tomcat)
文章目录 一、共享文件1.1为什么需要配置文件夹共享功能?1.2配置文件共享功能1.3高级共享和普通共享的区别: 二、防火墙设置2.1先要在虚拟机上安装JDK和Tomcat供外部访问。2.2设置防火墙: 一、共享文件 1.1为什么需要配置文件夹共享功能&…...
❀My排序算法学习之冒泡排序❀
目录 冒泡排序(Bubble Sort):) 一、定义 二、算法原理 三、算法分析 时间复杂度 算法稳定性 算法描述 C语言 C++ 算法比较 插入排序 选择排序 快速排序 归并排序 冒泡排序(Bubble Sort):) 一、定义 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单…...
服务器数据恢复-raid6离线磁盘强制上线后分区打不开的数据恢复案例
服务器数据恢复环境: 服务器上有一组由12块硬盘组建的raid6磁盘阵列,raid6阵列上层有一个lun,映射到WINDOWS系统上使用,WINDOWS系统划分了一个GPT分区。 服务器故障&分析: 服务器在运行过程中突然无法访问。对服务…...
Zookeeper在分布式命名服务中的实践
Java学习面试指南:https://javaxiaobear.cn 命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力,来为分布式系统中的资源命名。 哪些应用场景需要用到分布式命名服务呢࿱…...
说说 Spring Boot 实现接口幂等性有哪几种方案?
一、什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等…...
Dash中的callback的使用 多input 6
代码说明 import plotly.express as pxmport plotly.express as px用于导入plotly.express模块并给它起一个别名px。这样在后续的代码中,你可以使用px来代替plotly.express,使代码更加简洁。 plotly.express是Plotly的一个子模块,用于快速创…...
平方矩阵()
平方矩阵1 平方矩阵2 曼哈顿距离 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring>using namespace std;const int N 110;int n; int a[N][N];int main() {while(cin >> n, n){for (int i 0; i < n; i )fo…...
git基本命令
1、安装 介绍 安装 配置 2、git基本命令 2.1 基本操作 #1、查看空目录的git状态 $ git status fatal: not a git repository (or any of the parent directories): .git#2、初始化本地仓库:创建一个git的目录管理当前项目的所有文件版本 $ git init Initializ…...
GPU性能实时监测的实用工具
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
概率论中的 50 个具有挑战性的问题 [第 6 部分]:Chuck-a-Luck
一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒(Frederick Mosteller)的《概率论中的五十个具有挑战性的问题与解决方案》)一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
