一个用户直播打赏表 user_author live_amt. 记录每天用户给每个主播打赏的金额,包含字段 (p_date, user_id, author_id, total_cost_amt) ,分别为:格式为yyyymmdd的日 期,打赏用户ID,被打赏主播ID,打赏金额) 问题:查询累计打赏超过10万元的用户中,每个用户打赏总金额排名前3的主播ID和其被打赏总金额,勇窗口函数的方式写
时间: 2024-03-07 17:48:43 浏览: 593
以下是使用窗口函数的SQL代码,用于查询累计打赏超过10万元的用户中,每个用户打赏总金额排名前3的主播ID和其被打赏总金额:
```sql
WITH user_total AS (
SELECT user_id, author_id, SUM(total_cost_amt) AS total_amt
FROM user_author
GROUP BY user_id, author_id
), user_rank AS (
SELECT user_id, author_id, total_amt,
RANK() OVER (PARTITION BY user_id ORDER BY total_amt DESC) AS rank
FROM user_total
WHERE total_amt >= 100000
)
SELECT user_id, author_id, total_amt
FROM user_rank
WHERE rank <= 3;
```
这个SQL语句使用了两个公用表表达式(CTE),它们分别是:
- `user_total`:计算每个用户给每个主播的打赏总金额。
- `user_rank`:计算每个用户给每个主播的打赏总金额,并使用 `RANK()` 窗口函数为每个用户的打赏金额排名。
最后的查询语句从 `user_rank` 公用表表达式中选择排名前三的主播ID和其被打赏总金额,以及对应的用户ID。注意在窗口函数中使用 `PARTITION BY` 子句指定按照用户ID进行分组,使用 `ORDER BY` 子句指定按照打赏总金额进行排序。
阅读全文