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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宠物救助上门喂养系统宠物领养宠物寄养寻宠小程序宠物社区系统宠物托运宠物殡葬源码

后端php 前端uniapp mysql数据库 主要功能介绍&#xff1a; 1.根据当前位置 支持多城市切换 2.支持首页公告实时显示 3.支持 宠物救助&#xff0c;上门喂养&#xff0c;宠物领养&#xff0c;宠物寄养&#xff0c;寻宠&#xff0c;宠物社区&#xff0c;宠物托运&#xff…

【node-express】在commonjs的项目中使用esm和ts开发的sdk

在commonjs的项目中使用esm和ts开发的sdk 效果实现步骤 效果 在一些demo中, 大部分代码是commonjs规范开发的&#xff0c;但是要用到的sdk是ts开发的并且仅支持esm&#xff0c; 又不想配置很复杂的工程项目&#xff0c;可以这么做。如果你有更好的建议&#xff0c;希望能得到你…

学习笔记13——Spring整合Mybatis、junit、AOP、事务

学习笔记系列开头惯例发布一些寻亲消息 链接&#xff1a;https://baobeihuijia.com/bbhj/ Mybatis - Spring&#xff08;使用第三方包new一个对象bean&#xff09; 原始的Mybatis与数据库交互【通过sqlmapconfig来配置和连接】 初始化SqlSessionFactory获得连接获取数据层接口…

SQLServer性能分析--执行计划、耗时SQL排查和死锁处理

目录 1 常用系统存储过程2 查看执行计划3 查看磁盘使用率&#xff08;STATISTICS IO&#xff09;4 查询时间耗时较长的语句5 死锁处理参考资料 1 常用系统存储过程 1.1 查询表结构 EXEC sp_columns your_table, column_name table_column1.2 查询表索引 EXEC sp_helpindex …

FairyGUI-Cocos Creator官方Demo源码解读

博主在学习Cocos Creator的时候&#xff0c;发现了一款免费的UI编辑器FairyGUI。这款编辑器的能力十分强大&#xff0c;但是网上的学习资源比较少&#xff0c;坑比较多&#xff0c;主要学习方式就是阅读官方文档和练习官方Demo。这里博主进行官方Demo的解读。 从gitee上克隆项目…

超实用!CSDN个人数据Chrome插件开发

插件简介 相信写过博客的都知道&#xff0c;每天会经常打开自己的主页无数次&#xff0c;尤其是写了一篇新文章&#xff0c;就为了看文章浏览量增长了多少&#xff0c;文章获得了多少个赞&#xff0c;有多少人评论&#xff08;谁不想自己写的文章成为爆款呢&#xff5e;&#…

ubuntu装机记录

1.配网 文件地址&#xff1a; greeW19a406  ⚙ /etc/netplan  pwd  ✔  8  15:40:50 /etc/netplangreeW19a406  ⚙ /etc/netplan  #文件内容&#xff0c;注意缩进与网关可能报错需要添加初始化命令 # Let NetworkManager manage all…

PaddleOCR离线环境搭建

步骤&#xff1a; 1.安装python 2.在同配置下互联网环境的机器A上运行起来&#xff0c;参考如下 https://qushen.blog.csdn.net/article/details/135306757 3.机器A导出对应的依赖和模型 4.离线机器B导入对应的的依赖和模型 所以重点的第三步和第四步 导出依赖&#xff1…

基于Java学生成绩管理系统设计与实现(源码+部署文档+报告)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

【JavaEE进阶】 初识Spring Web MVC

文章目录 &#x1f334;什么是Spring Web MVC&#xff1f;&#x1f6a9;什么是Servlet呢? &#x1f38b;MVC 定义&#x1f6a9;再理解Spring MVC &#x1f340;如何学习Spring MVC呢&#xff1f;⭕总结 &#x1f334;什么是Spring Web MVC&#xff1f; Spring Web MVC 是基于…

C编程指针篇----包括历年真题

一&#xff0c;&#xff08;20年&#xff09;用指针字符逆序 代码&#xff1a; int main() {char s[7] "monkey", * p1, * p2, c;p1 p2 s;while (*p2) p2;p2--;while (p2 > p1) {c *p1; *p1 *p2; *p2-- c; }printf("%s", s);return 0; } 运行结…

LCR 150. 彩灯装饰记录 II

解题思路&#xff1a; 与LCR. 彩灯装饰记录 I类似&#xff0c;增加了分层输出。 class Solution {public List<List<Integer>> decorateRecord(TreeNode root) {Queue<TreeNode> queue new LinkedList<>();List<List<Integer>> res ne…

【Linux操作系统】探秘Linux奥秘:操作系统的入门与实战

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《操作系统实验室》&#x1f516;诗赋清音&#xff1a;柳垂轻絮拂人衣&#xff0c;心随风舞梦飞。 山川湖海皆可涉&#xff0c;勇者征途逐星辉。 目录 &#x1fa90;1 初识Linux OS …

WebGL以及wasm的介绍以及简单应用

简介 下面主要介绍了WebGL和wasm,是除了html,css,js以外Web标准所支持的另外两个大件 前者实现复杂的图形处理,后者提供高效的代码迁移以及代码执行效率 WebGL 简介 首先,浏览器里的游戏是怎么做到这种交互又显示不同的画面的? 试想用我们的前端三件套实现一下.好像可以…

大创项目推荐 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

Unity坦克大战开发全流程——开始场景——设置界面

开始场景——设置界面 step1&#xff1a;设置面板的背景图 照着这个来设置就行了 step2&#xff1a;写代码 关联的按钮控件 监听事件函数 注意&#xff1a;要在start函数中再写一行HideMe函数&#xff0c;以便该面板能在一开始就能隐藏自己。 再在BeginPanel脚本中调用该函数即…

基于SSM的蛋糕甜品店管理系统的设计与开发论文

基于SSM的蛋糕甜品店管理系统的设计与开发 摘要 如今&#xff0c;科学技术的力量越来越强大&#xff0c;通过结合较为成熟的计算机技术&#xff0c;促进了学校、医疗、商城等许多行业领域的发展。为了顺应时代的变化&#xff0c;各行业结合互联网、人工智能等技术&#xff0c…

R语言【base】——cat() 输出对象,连接表示法,其运行的转换比 print 少得多

Package base version 4.3.2 Parameters cat(... , file "", sep " ", fill FALSE, labels NULL, append FALSE) 参数【...】&#xff1a;R 对象。 参数【file】&#xff1a;一个 connection&#xff0c;或一个命名要打印到的文件的字符串。如果是…

手写Spring与基本原理--简易版

文章目录 手写Spring与基本原理解析简介写一个简单的Bean加载容器定义一个抽象所有类的BeanDefinition定义一个工厂存储所有的类测试 实现Bean的注册定义和获取基于Cglib实现含构造函数的类实例化策略Bean对象注入属性和依赖Bean的功能Spring.xml解析和注册Bean对象实现应用上下…

API 开放平台项目(已整理,已废弃)

项目大纲 前端 React 18Ant Design Pro 5.x 脚手架Ant Design & Procomponents 组件库Umi 4 前端框架OpenAPI 前端代码生成 后端 Java Spring BootMySQL 数据库MyBatis-Plus 及 MyBatis X 自动生成API 签名认证&#xff08;Http 调用&#xff09;Spring Boot Starter&#…