sql必备知识(每日SQL自学知识点)

  • 1) 聚合窗口函数
    • MIN()OVER() :不改变表结构的前提下,计算出最小值
    • MAX()OVER():不改变表结构的前提下,计算出最大值
    • COUNT()OVER():不改变表结构的前提下,计数
    • SUM()OVER():不改变表结构的前提下,求和
    • AVG()OVER():不改变表结构的前提下,求平均值
  • 2)排序窗口函数
    • percent_rank() over() 按照数字所在的位置进行百分位分段
    • ntile(n)over() 将数字按照大小平均分成n段
    • lead(字段名,n)over()把字段数据向前移n个单元格
    • lag(字段名,n)over()把字段数据向后移n个单元格

例子:

1、

SELECT uid,a.exam_id,score,

MIN(score) OVER(PARTITION BY exam_id) min_x, #求每类试卷的得分最小值

MAX(score)OVER(PARTITION BY exam_id) max_x #求每类试卷的得分最大值

FROM exam_record a

LEFT JOIN examination_info b ON a.exam_id=b.exam_id

WHERE difficulty='hard' #难度为'hard'

AND score IS NOT NULL; #分数不为空

输出结果:

sql必备知识(每日SQL自学知识点)(1)

2、

SELECT exam_id,DATE_FORMAT(start_time,'%Y%m')start_month, COUNT(start_time) month_cnt,

SUM(COUNT(start_time))OVER(Partition by exam_id ORDER BY DATE_FORMAT(start_time,'%Y%m'))cum_exam_cnt

FROM exam_record

GROUP BY exam_id,start_month;

输出结果

sql必备知识(每日SQL自学知识点)(2)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页