制作网站时,您需要多少创新创意产品设计方案?
摘要:请人做网站要多少,创新创意产品设计方案,广州哪里做网站,如保做网站赢利目录 1 题目2 建表语句3 题解 1 题目 有用户账户表,包含年份,用户id和值,请按照年份分组&a
请人做网站要多少,创新创意产品设计方案,广州哪里做网站,如保做网站赢利目录 1 题目2 建表语句3 题解 1 题目 有用户账户表#xff0c;包含年份#xff0c;用户id和值,请按照年份分组#xff0c;取出值前两小和前两大对应的用户id#xff0c;需要保持值最小和最大的用户id排首位。
样例数据
-------------------------
| year | user_id | v… 目录 1 题目2 建表语句3 题解 1 题目 有用户账户表包含年份用户id和值,请按照年份分组取出值前两小和前两大对应的用户id需要保持值最小和最大的用户id排首位。
样例数据
-------------------------
| year | user_id | value |
-------------------------
| 2022 | A | 30 |
| 2022 | B | 10 |
| 2022 | C | 20 |
| 2023 | A | 40 |
| 2023 | B | 50 |
| 2023 | C | 20 |
| 2023 | D | 30 |
-------------------------期望结果
-----------------------------------------
| year | max2_user_list | min2_user_list |
-----------------------------------------
| 2022 | A,C | B,C |
| 2023 | B,A | C,D |
-----------------------------------------2 建表语句 --建表语句
create table if not exists t_amount
(year string,user_id string,value bigint
)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ,STORED AS orc;--插入数据insert into t_amount(year, user_id, value)
values (2022, A, 30),(2022, B, 10),(2022, C, 20),(2023, A, 40),(2023, B, 50),(2023, C, 20),(2023, D, 30)3 题解 1row_number函数根据年份分组value正排和倒排得到两个序列
select user_id, year, value, row_number() over (partition by year order by value desc) as desc_rn, row_number() over (partition by year order by value) as rn
from t_amount执行结果
----------------------------------------
| user_id | year | value | desc_rn | rn |
----------------------------------------
| B | 2022 | 10 | 3 | 1 |
| C | 2022 | 20 | 2 | 2 |
| A | 2022 | 30 | 1 | 3 |
| C | 2023 | 20 | 4 | 1 |
| D | 2023 | 30 | 3 | 2 |
| A | 2023 | 40 | 2 | 3 |
| B | 2023 | 50 | 1 | 4 |
----------------------------------------2根据年份分组取出value最大user_id第二大user_id最小user_id第二小user_id
根据年份分组取出每年最大、第二大最小、第二小用户ID。使用 if 对desc_rnrn进行判断对符合条件的数据取出 user_id其他去null然后使用聚合函数取出结果。
select year,max(if(desc_rn 1, user_id, null)) as max1_user_id,max(if(desc_rn 2, user_id, null)) as max2_user_id,max(if(rn 1, user_id, null)) as min1_user_id,max(if(rn 2, user_id, null)) as min2_user_id
from (select user_id, year, value, row_number() over (partition by year order by value desc) as desc_rn, row_number() over (partition by year order by value) as rnfrom t_amount) t1
group by year执行结果
-------------------------------------------------------------------
| year | max1_user_id | max2_user_id | min1_user_id | min2_user_id |
-------------------------------------------------------------------
| 2022 | A | C | B | C |
| 2023 | B | A | C | D |
-------------------------------------------------------------------3按照顺序拼接得到最终结果
按照题目要求进行字符拼接
拼接max1_user_id、max2_user_id为max2_list拼接min1_user_id、min2_user_id为min2_list;
select year,concat(max(if(desc_rn 1, user_id, null)), ,,max(if(desc_rn 2, user_id, null))) as max2_user_list,concat(max(if(rn 1, user_id, null)), ,,max(if(rn 2, user_id, null))) as min2_user_list
from (select user_id, year, value, row_number() over (partition by year order by value desc) as desc_rn, row_number() over (partition by year order by value) as rnfrom t_amount) t1
group by year执行结果
-----------------------------------------
| year | max2_user_list | min2_user_list |
-----------------------------------------
| 2022 | A,C | B,C |
| 2023 | B,A | C,D |
-----------------------------------------
