sql 统计和分类

来源:互联网 发布:淘宝客服怎么登录 编辑:程序博客网 时间:2024/05/29 04:28

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 hual
sql:
 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 all
select '001','天达',3 union all
select '001','天达',4 union all
select '002','宏达',1 union all
select '002','宏达',2
---------------上面是创建表和插入数据----------------------
-----------------下面是查询结果的sql---------------
select * from
(
select * from tb
union all
select 客户编码 = 客户编码+'小计' , 客户名称 = '小计' , sum(数量) 数量 from tb group by 客户编码
union all
select 客户编码 = '', 客户名称 = '合计' , sum(数量) 数量 from tb
) t
order by case 客户编码 when '' then 2 else 1 end , 客户编码 , case 客户名称 when '小计' then 2 else 1 end

结果为:
客户编码 客户名称 数量
001  天达  2
001  天达  3
001  天达  4
001小计  小计  9
002  宏达  1
002  宏达  2
002小计  小计  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 

 

 

结果为:

 

001001天达2

001001天达3

001001天达4

001sum001小计小计9

002002宏达1

002002宏达2

002sum002小计小计3

zzzzz合计12

 

 

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

eg:

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

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

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

上面的方法就可以实现了

 

原创粉丝点击