当前位置: 首页 > news >正文

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、简介 接口是一系列抽象方法的声明&#xff0c;是一些方法特征的集合&#xff0c;这些方法都应该是抽象的&#xff0c;需要有由具体的类去实现&#xff0c;然后第三方就可以通过这组抽象方法调用&#xff0c;让具体的类执行具体的方法。 2、接口的定义 interface interface_…...

【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口?!

【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口&#xff1f;&#xff01;&#x1f60e; 前言&#x1f64c;【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口&#xff1f;&#xff01;查看自己的配置文件&#xff1a;最终成功访问如图所示&#xff1a; 总结撒花…...

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推出的功能&#xff0c;它可以实现在一个Java应用中可以像调用本地方法一样调用另一个服务器中Java应用&#xff08;JVM&#xff09;中的内容。 RMI 是Java语言的远程调用&#xff0c;无法实现跨语言。…...

strlen和sizeof的初步理解

大家好我是Beilef&#xff0c;一个美好的下我接触到编程并且逐渐喜欢。我虽然不是科班出身但是我会更加努力地去学&#xff0c;有啥不对的地方请斧正 文章目录 目录 文章目录 前言 想必大家对sizeof肯定很了解&#xff0c;那对strlen又了解多少。其实这个问题应该让不少人困扰。…...

纯CSS的华为充电动画,它来了

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; Krpano专栏&#xff1a;想学Krpano的&#xff0c;冲 &#x1f514…...

在架构设计中,前后端分离有什么好处?

前后端分离是一种架构设计模式&#xff0c;将前端和后端的开发分别独立进行&#xff0c;它带来了多方面的好处&#xff1a; 1、独立开发和维护&#xff1a; 前后端分离允许前端和后端开发团队独立进行工作。这意味着两个团队可以并行开发&#xff0c;提高了整体的开发效率。前…...

C语言中的结构体和联合体:异同及应用

文章目录 C语言中的结构体和联合体&#xff1a;异同及应用1. 结构体&#xff08;Struct&#xff09;的概述代码示例&#xff1a; 2. 联合体&#xff08;Union&#xff09;的概述代码示例&#xff1a; 3. 结构体与联合体的异同点相同点&#xff1a;不同点&#xff1a;代码说明 结…...

文件夹共享(普通共享和高级共享的区别)防火墙设置(包括了jdk安装和Tomcat)

文章目录 一、共享文件1.1为什么需要配置文件夹共享功能&#xff1f;1.2配置文件共享功能1.3高级共享和普通共享的区别&#xff1a; 二、防火墙设置2.1先要在虚拟机上安装JDK和Tomcat供外部访问。2.2设置防火墙&#xff1a; 一、共享文件 1.1为什么需要配置文件夹共享功能&…...

❀My排序算法学习之冒泡排序❀

目录 冒泡排序(Bubble Sort):) 一、定义 二、算法原理 三、算法分析 时间复杂度 算法稳定性 算法描述 C语言 C++ 算法比较 插入排序 选择排序 快速排序 归并排序 冒泡排序(Bubble Sort):) 一、定义 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单…...

服务器数据恢复-raid6离线磁盘强制上线后分区打不开的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器上有一组由12块硬盘组建的raid6磁盘阵列&#xff0c;raid6阵列上层有一个lun&#xff0c;映射到WINDOWS系统上使用&#xff0c;WINDOWS系统划分了一个GPT分区。 服务器故障&分析&#xff1a; 服务器在运行过程中突然无法访问。对服务…...

Zookeeper在分布式命名服务中的实践

Java学习面试指南&#xff1a;https://javaxiaobear.cn 命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力&#xff0c;来为分布式系统中的资源命名。 哪些应用场景需要用到分布式命名服务呢&#xff1…...

说说 Spring Boot 实现接口幂等性有哪几种方案?

一、什么是幂等性 幂等是一个数学与计算机学概念&#xff0c;在数学中某一元运算为幂等时&#xff0c;其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中&#xff0c;一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等…...

Dash中的callback的使用 多input 6

代码说明 import plotly.express as pxmport plotly.express as px用于导入plotly.express模块并给它起一个别名px。这样在后续的代码中&#xff0c;你可以使用px来代替plotly.express&#xff0c;使代码更加简洁。 plotly.express是Plotly的一个子模块&#xff0c;用于快速创…...

平方矩阵()

平方矩阵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、初始化本地仓库&#xff1a;创建一个git的目录管理当前项目的所有文件版本 $ git init Initializ…...

GPU性能实时监测的实用工具

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

概率论中的 50 个具有挑战性的问题 [第 6 部分]:Chuck-a-Luck

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff09;一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…...

别再死记硬背了!用一张图+代码示例,彻底搞懂蓝牙BLE配对的6种SMP流程

蓝牙BLE安全配对实战图解&#xff1a;6种SMP流程与核心算法拆解 每次看到蓝牙协议栈里那些晦涩的安全管理协议&#xff08;SMP&#xff09;文档就头疼&#xff1f;别担心&#xff0c;今天我们用工程师的思维来重新解构这个"安全黑匣子"。扔掉那些让人昏昏欲睡的文字…...

黑丝空姐-造相Z-Turbo场景应用:为你的内容创作提供无限灵感

黑丝空姐-造相Z-Turbo场景应用&#xff1a;为你的内容创作提供无限灵感 1. 镜像概述与核心能力 黑丝空姐-造相Z-Turbo是一款基于Xinference部署的文生图模型服务&#xff0c;通过gradio提供直观的交互界面。该镜像专注于生成特定风格的视觉内容&#xff0c;为创意工作者提供高…...

告别“AI只会聊天”:用OpenClaw+星链4SAPI打造你的办公自动化Agent

你有没有过这种时刻——邮箱右上角的红点像一道催命符&#xff0c;文件夹乱得像个数据坟场&#xff0c;日程表排得跟俄罗斯方块似的&#xff0c;领导一句“把本周情况汇总下”&#xff0c;你就得在聊天记录里搞考古发掘。打开AI&#xff0c;发现它除了陪你聊天&#xff0c;什么…...

艾体宝洞察|语义搜索与关键词搜索?业务的抉择

包括我在内&#xff0c;不少人第一次做搜索功能时&#xff0c;都会觉得这是一件没什么技术含量的事&#xff1a;用户输入几个词&#xff0c;系统返回结果&#xff0c;不就行了吗&#xff1f; 但只要你真正做过搜索系统&#xff0c;尤其是参与过 RAG&#xff08;Retrieval-Augme…...

HagiCode Soul 平台技术解析:从需求萌发到独立平台的演进之路

先回顾&#xff1a;三次握手&#xff08;建立连接&#xff09;核心流程&#xff08;实际版&#xff09; 为了让挥手流程衔接更顺畅&#xff0c;咱们先快速回顾三次握手的实际核心&#xff0c;避免上下文脱节&#xff1a; 第一步&#xff08;客户端→服务器&#xff09;&#xf…...

OpenClaw技能开发入门:为千问3.5-27B编写自定义模块

OpenClaw技能开发入门&#xff1a;为千问3.5-27B编写自定义模块 1. 为什么需要自定义技能&#xff1f; 去年冬天&#xff0c;我发现自己每天早晨都要手动查询天气并发送给家人。重复的操作让我开始思考&#xff1a;能否让OpenClaw帮我自动完成这个任务&#xff1f;这就是我踏…...

Phi-3-mini-4k-instruct-gguf完整指南:模型原理、部署、调参、运维一体化

Phi-3-mini-4k-instruct-gguf完整指南&#xff1a;模型原理、部署、调参、运维一体化 1. 模型概述 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个模型特别适合处理问答、文本改写、摘要整理和简短创作等任务。相比完整版模型&#xff0c;…...

Pixel Epic效果实测:不同逻辑发散概率下技术路线图描述准确率对比

Pixel Epic效果实测&#xff1a;不同逻辑发散概率下技术路线图描述准确率对比 1. 测试背景与目的 Pixel Epic作为一款创新型研究报告辅助工具&#xff0c;其核心功能"贤者之智"模块采用了独特的逻辑发散机制。本次测试旨在评估不同逻辑发散概率设置对技术路线图描述…...

SDMatte开源大模型部署:本地化AI抠图替代PS,支持透明物体精细提取

SDMatte开源大模型部署&#xff1a;本地化AI抠图替代PS&#xff0c;支持透明物体精细提取 1. 产品概述 SDMatte是一款专注于高质量图像抠图的AI模型&#xff0c;特别擅长处理传统抠图工具难以应对的复杂场景。与Photoshop等传统工具相比&#xff0c;SDMatte通过深度学习技术实…...

Pixel Fashion Atelier新手教程:RPG式交互界面操作全图解

Pixel Fashion Atelier新手教程&#xff1a;RPG式交互界面操作全图解 1. 认识像素时装锻造坊 Pixel Fashion Atelier是一款独特的AI图像生成工具&#xff0c;它将传统的AI绘图技术与复古日系RPG游戏界面完美融合。不同于市面上常见的暗色调AI工具&#xff0c;这款应用采用了明…...