跑一批业务数据,发现了一个小问题,查出来的区间都是4-8,然后业务很怀疑,我重新审视了一下代码,发现了这个case when 的问题
case when a<4 then 1 when 4<= a <8 then 2 这样能通过,但是结果是错的,基本出现的结果都是4-8,后面的判断都不执行了,SQL认为a>4的取值都是了,其实后面还有若干个判断,但是都不执行了....很诡异
更正方法:case when a<4 then 1 when a>=4 and a<8 then 2 这样是可以的
找出一组数据中最大,第二大,第三大数据:使用窗口函数,例如我们现在有id,num 两个字段
select id,num from(select id,num,row_number over(partition by id order by num desc) r from table)t where r=2,通过利用r的取值来取排序数据,