sql刷题常用函数

ROW_NUMBER()

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

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 BY 和 ORDER 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值