mysql排序之if(isnull(字段名),0,1),fild 或者 if(isnull(字段名),1,0),fild

本文介绍了在MySQL数据库中处理NULL值排序的方法。通过使用IF(ISNULL)函数,可以灵活地控制NULL值在排序中的位置,使其前置或后置。文章详细解析了不同排序方式的实现原理,帮助读者掌握更高级的数据检索技巧。

最近在使用mysql排序的时候,比如按照sort排序,于是 : select filds from table order by sort asc

null排在前面。

看到同事是这样处理的:IF(ISNULL(sort1),1,0), sort1

默认情况下,mysqlnull算作最小值。如果想要手动指定null的顺序,可以这样处理:

1. 将null强制放在最前(默认就是这样)

SELECT * FROM BGM_LIST ORDER BY if(isnull(SORT),0,1),SORT ASC //null, null, 1,2,3,4

2. 将null强制放在最后

SELECT * FROM BGM_LIST ORDER BY if(isnull(SORT),1,0),SORT ASC //1,2,3,4,null,null

SELECT * FROM BGM_LIST ORDER BY if(isnull(SORT),1,0),SORT DESC // 4,3,2,1,null,null

3. 解释

if(isnull(字段名),0,1),fild为例,它的意思是将该字段根据是否为null值分成两部分,值为null行相当于得到了一个隐含的排序属性0,值为非null的行相当于得到了一个隐含的排序属性1,在排序的时候,先根据这一隐含属性进行升序排列,因为if(isnull(字段名),0,1),fild相当于if(isnull(字段名),0,1),fild asc省略了asc而已,所以自然地,排序字段为null的那些行(隐含排序属性)会在最前。if(isnull(字段名),1,0)反之。

参考:https://www.jianshu.com/p/04b74770d731

在clc; %清除命令行命令 clear all; %清除工作区变量,释放内存空间 F1=1; %信号频率 Fs=2^12; %采样频率 P1=0; %信号初始相位 N=2^12; %采样点数 t=[0:1/Fs:(N-1)/Fs]; %采样时刻 ADC=2^7-1; %直流分量 A=2^6; %信号幅度 s1=A*sin(2*pi*F1*t + pi*P1/180) + ADC; %正弦波信号 s2=A*square(2*pi*F1*t + pi*P1/180) + ADC; %方波信号 s3=A*sawtooth(2*pi*F1*t + pi*P1/180,0.5) + ADC; %三角波信号 s4=A*sawtooth(2*pi*F1*t + pi*P1/180) + ADC; %锯齿波信号 %创建mif文件 fild = fopen('wave_16384x8.mif','wt'); %写入mif文件头 fprintf(fild, '%s\n','WIDTH=8;'); %位宽 fprintf(fild, '%s\n\n','DEPTH=16384;'); %深度 fprintf(fild, '%s\n','ADDRESS_RADIX=UNS;'); %地址格式 fprintf(fild, '%s\n\n','DATA_RADIX=UNS;'); %数据格式 fprintf(fild, '%s\t','CONTENT'); %地址 fprintf(fild, '%s\n','BEGIN'); %开始 for j = 1:4 for i = 1:N if j == 1 %打印正弦信号数据 s0(i) = round(s1(i)); %对小数四舍五入以取整 fprintf(fild, '\t%g\t',i-1); %地址编码 end if j == 2 %打印方波信号数据 s0(i) = round(s2(i)); %对小数四舍五入以取整 fprintf(fild, '\t%g\t',i-1+N); %地址编码 end if j == 3 %打印三角波信号数据 s0(i) = round(s3(i)); %对小数四舍五入以取整 fprintf(fild, '\t%g\t',i-1+(2*N)); %地址编码 end if j == 4 %打印锯齿波信号数据 s0(i) = round(s4(i)); %对小数四舍五入以取整 fprintf(fild, '\t%g\t',i-1+(3*N)); %地址编码 end if s0(i) <0 %负1强制置零 s0(i) = 0 end fprintf(fild, '%s\t',':'); %冒号 fprintf(fild, '%d',s0(i)); %数据写入 fprintf(fild, '%s\n',';'); %分号,换行 end end fprintf(fild, '%s\n','END;'); %结束 fclose(fild);
07-31
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值