sql刷题常用函数

ROW_NUMBER()OVER (PARTITION BY ... ORDER BY ...) 是一个窗口函数,用于生成每个分组内的唯一行号。这个函数非常适合在分组数据中进行排序,并为每一行分配一个序号。下面是对你的具体示例的详细解释:

sql 复制代码
ROW_NUMBER() OVER (
    PARTITION BY MONTH(p.fdate)
    ORDER BY COUNT(p.user_id) DESC, s.song_id
) AS song_rank

详细解释:

  1. ROW_NUMBER():

    • 这是一个窗口函数,用于为查询结果中的每一行生成一个唯一的行号。
  2. OVER (...):

    • 这是窗口函数的语法部分,用于指定如何计算行号。它可以包括 PARTITION BYORDER BY 子句。
  3. PARTITION BY MONTH(p.fdate):

    • 这个子句指定了如何将数据分组。PARTITION BY 将结果集分成不同的分区或组,在每个分区内,ROW_NUMBER() 函数将计算行号。
    • 在你的示例中,MONTH(p.fdate) 意味着数据将按月份分组。这意味着每个月的数据都会被单独处理,ROW_NUMBER() 函数会在每个月的数据中生成行号。
  4. ORDER BY COUNT(p.user_id) DESC, s.song_id:

    • 这个子句定义了在每个分区内如何对行进行排序,然后为每行分配行号。
    • COUNT(p.user_id) DESC:首先按 COUNT(p.user_id) 的降序进行排序。COUNT(p.user_id) 是每首歌曲在特定月份的播放次数,这样播放次数最多的歌曲会排在前面。
    • s.song_id:在播放次数相同的情况下,按 s.song_id 进行升序排序。这里 s.song_id 作为次级排序条件,确保每个歌曲在播放次数相同的情况下有一个唯一的排序。
  5. AS song_rank:

    • AS 用于为计算出的行号分配一个别名。在你的查询中,这个别名是 song_rank。它表示每首歌在每个月中的排名。

CONCAT()

  1. CONCAT(ROUND(COUNT(l.overdue_days) / COUNT(*) * 100, 1), '%') AS overdue_ratio

    • COUNT(l.overdue_days):计算每个支付能力等级中有逾期记录的贷款数。
    • COUNT(*):计算每个支付能力等级中所有贷款的总数。
    • COUNT(l.overdue_days) / COUNT(*):计算逾期贷款占所有贷款的比例。
    • * 100:将比例转换为百分比。
    • ROUND(..., 1):将计算出的百分比四舍五入到小数点后一位。
    • CONCAT(..., '%'):将四舍五入后的百分比与 % 符号连接起来,生成如 25.5% 的格式。
    • AS overdue_ratio:给计算出的百分比结果指定别名 overdue_ratio
相关推荐
云和恩墨3 小时前
OceanBase企业版会话级SQL跟踪实操:DBMS_MONITOR(类Oracle 10046事件)
数据库·sql·oracle·oceanbase
为什么不问问神奇的海螺呢丶3 小时前
oracle 数据库巡检 sql
数据库·sql·oracle
聪明努力的积极向上10 小时前
【MYSQL】字符串拼接和参数化sql语句区别
数据库·sql·mysql
文刀竹肃13 小时前
DVWA -SQL Injection-通关教程-完结
前端·数据库·sql·安全·网络安全·oracle
Honmaple13 小时前
中国四级城市联动数据,包含港澳台,内含json , sql , python 脚本
python·sql·json
思成不止于此14 小时前
【MySQL 零基础入门】MySQL 约束精讲(一):基础约束篇
数据库·笔记·sql·学习·mysql
ActionTech14 小时前
SCALE | SQLFlash 在 SQL 优化维度上的表现评估
数据库·sql
他是龙55116 小时前
43:SQL注入进阶(请求类型、方法与格式实战)
数据库·sql
小小测试开发18 小时前
SQL常用语法全解析:从入门到进阶的实战指南
数据库·sql
Hello.Reader19 小时前
Flink SQL EXPLAIN “看懂计划”到“用 PLAN_ADVICE 调优”
大数据·sql·flink