sql 统计和分类

    技术2022-05-19  25

    1.sql语句中多加一列不是自己表中的语法:eg: select sname,grade,deptid, 可用数量 = case deptid when 2 then 20 else grade end /**这个可用数量就是用户自己添加上去的与表无关的列**/ from test_groupby

    2.取出某一类中的最大数据例如: 表:dept deptid sal name    01 2000 jack 01 300 tom 02 4000 lucy 02 5000 hual要得到以下结果,请写出sql: deptid sal  name 01 2000 jack 02 5000 hualsql: select t1.* from dept t1 where sal = (select max(sal) from dept t2 where t1.name = t2.name)上面的sql就能得出取出某一类种的最大数据了 

    3.进行分类小计和总计(sql实现),(实际上这里我们可以考虑在添加一列,专门用来排序)eg:create table [tb]([客户编码] varchar(10),[客户名称] varchar(10),[数量] int)insert [tb]select '001','天达',2 union allselect '001','天达',3 union allselect '001','天达',4 union allselect '002','宏达',1 union allselect '002','宏达',2---------------上面是创建表和插入数据---------------------------------------下面是查询结果的sql---------------select * from(select * from tbunion all select 客户编码 = 客户编码+'小计' , 客户名称 = '小计' , sum(数量) 数量 from tb group by 客户编码union allselect 客户编码 = '', 客户名称 = '合计' , sum(数量) 数量 from tb) torder by case 客户编码 when '' then 2 else 1 end , 客户编码 , case 客户名称 when '小计' then 2 else 1 end

    结果为:客户编码 客户名称 数量001  天达  2001  天达  3001  天达  4001小计  小计  9002  宏达  1002  宏达  2002小计  小计  3  合计  12

     

    加了一列来实现的方法:

    eg:

     

    select * from

    (

    select sortno=客户编码+'',客户编码,客户名称,数量 from tb

    union all 

    select sortno=客户编码+'sum',客户编码 = 客户编码+'小计' , 客户名称 = '小计' , sum(数量) 数量 from tb group by 客户编码

    union all

    select sortno='zzzzz',客户编码 = '', 客户名称 = '合计' , sum(数量) 数量 from tb

    ) t

    order by sortno 

     

     

    结果为:

     

    001 001 天达 2

    001 001 天达 3

    001 001 天达 4

    001sum 001小计 小计 9

    002 002 宏达 1

    002 002 宏达 2

    002sum 002小计 小计 3

    zzzzz 合计 12

     

     

    4.从外界接受一个参数param,如果param=''的话,则将全部的值都查出来,如果不为空的话,则将符合param的值的所有记录查找出来

    eg:

     select * from test_groupby where param='' or (param<>'' and sname=param) 

    上面的语句相当于三元表达式: 

    param == '' ? '' : sname=param

    上面的方法就可以实现了

     


    最新回复(0)