七种SQL进阶用法
1,自定义排序
select * from table order by FIELD (f1,'enum1' ,'enum2','enum3')
FIELD 函数的作用是 自定义排序,让table表中中的f1字段来按照enum1, enums2,enum3 的方式来进行排序 ,这个排序主要讲究的是若是存在则按照该字段的排序顺序进行主要的排序,若是不存则按照ascll的方式来进行排序,若是没有则进行空排序
2,自定义排序之对于null值的数据进行处理,是放在整个数据首部,还是放在整个数据的尾部
select * from table order by if(ISNULL(f1),0,1) ,f2,f3;
通过if(ISNULL(f1),0,1)来判断是放在查询集的首部还是尾部
3,采用case when的方式来进行数据的判断
select * ,case when f1 > value1 then '1'
when f1 > value2 then '2'
when f1 > value3 then '3'
when f1 > value4 then '4' end name
from table ;
通过case when方式来进行将数据进行分段,并进行处理展示,并添加新的字段名称为name ,
4,自定义字段排序并拼接数据
select f1,
GROUP_CONCAT(f2 order by f3 desc SEPARATOR '_'),
GROUP_CONACT(f3 order by f3 desc SEPARATOR '_')
from table GROUP BY f1;
通过group_concat 函数将 group by 之后的字段进行拼接,并按照separator 为'_'的方式来进行拼接
5, 分组统计数据后再进行统计汇总(with rollup)
select f1,sum(price) from table GROUP BY f1 WITH ROLLUP
6,子查询提取
with m1 as (select * from table where f1 > 50),
m2 as (select * from table where f2 >65)
select * from m1 where m1.id = m2.id
7,优雅处理数据插入,更新时主键,唯一性重复
1, insert ignore into table(id,f1,f2), (value1,value2,value3);
如果主键存在的话,那么就不会添加该数据,有则忽略,无则添加
2, replace into table(id,f1,f2), (value1,value2,value3);
有则删除+ 插入,无则插入
3, insert into table(id,f1,f2), (value1,value2,value3) on duplicate key update id = id + 10
如果主键存在则会对该主键执update操作,如果不存在则进行插入操作