糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > SQL 年龄段 品牌分类 分组统计

SQL 年龄段 品牌分类 分组统计

时间:2024-04-28 04:01:59

相关推荐

SQL 年龄段 品牌分类 分组统计

-->测试数据:[tb]

ifobject_id('[tb]')isnotnulldroptable[tb]

go

createtable[tb]([姓名]varchar(1),[部门]varchar(4),[学历]varchar(4),[出生年月]datetime)

insert[tb]

select'A','后勤','高中','1986-1-1'unionall

select'B','后勤','初中','1984-3-7'unionall

select'C','管理','本科','1987-2-1'unionall

select'D','操作','专科','1976-2-1'unionall

select'E','操作','专科','1943-2-1'

--------------开始查询--------------------------

declare@sqlvarchar(8000)

set@sql='select部门,dbo.AgeLevel([出生年月])as年龄段'

select@sql=@sql+',sum(case学历when'''+学历+'''then1else0end)['+学历+']'

from(selectdistinct学历fromtb)asa

set@sql=@sql+'fromtbgroupby部门,dbo.AgeLevel([出生年月])'

exec(@sql)

/*

部门年龄段本科初中高中专科

----------------------------------------------------------

管理21-301000

后勤21-300110

操作31-400001

操作50以上0001

(4行受影响)

*/

dropfunctionAgeLevel

go

--获取年龄段

createfunctionAgeLevel(@birthdaydatetime)

returnsvarchar(10)

as

begin

declare@AgeLevelvarchar(10)

select@AgeLevel=case((datediff(year,@birthday,getdate())-1)/10)when2then'21-30'when3then'31-40'when4then'41-50'else'50以上'end

return@AgeLevel

end

go

select*,dbo.AgeLevel([出生年月])as年龄段fromtb

/*

姓名部门学历出生年月年龄段

---------------------------------------------

A后勤高中1986-01-0100:00:00.00021-30

B后勤初中1984-03-0700:00:00.00021-30

C管理本科1987-02-0100:00:00.00021-30

D操作专科1976-02-0100:00:00.00031-40

E操作专科1943-02-0100:00:00.00050以上

*/

selectN'年龄段'=(

case((datediff(year,[出生年月],getdate())-1)/10)

when2then'21-30'

when3then'31-40'

when4then'41-50'

else'50以上'

end),

count(*)ascount

fromtb

groupby(

case((datediff(year,[出生年月],getdate())-1)/10)

when2then'21-30'

when3then'31-40'

when4then'41-50'

else'50以上'

end)

/*

年龄段count

-----------------

21-303

31-401

50以上1

(3行受影响)

*/

--以10岁为递增

select

cast(f1*10+1asvarchar(3))+'-'+cast(f1*10+10asvarchar(3))as年龄段,f2as人数

from

(

selectdatediff(d,[出生年月],getdate())/365/10asf1,

count(*)asf2

fromtb

groupbydatediff(d,[出生年月],getdate())/365/10)a

orderbycast(f1*10+1asvarchar(3))+'-'+cast(f1*10+10asvarchar(3))

/*

年龄段人数

------------------

21-303

31-401

61-701

(3行受影响)

*/

SELECT

SUM(

CASEWHENdatediff(year,[出生年月],getdate())BETWEEN16AND20THEN1ELSE0END)AS'16-20',

SUM(CASEWHENdatediff(year,[出生年月],getdate())BETWEEN21AND30THEN1ELSE0END)AS'21-30',

SUM(CASEWHENdatediff(year,[出生年月],getdate())BETWEEN31AND40THEN1ELSE0END)AS'31-40',

SUM(CASEWHENdatediff(year,[出生年月],getdate())BETWEEN41AND50THEN1ELSE0END)AS'41-50',

SUM(CASEWHENdatediff(year,[出生年月],getdate())BETWEEN51AND60THEN1ELSE0END)AS'51-60',

SUM(CASEWHENdatediff(year,[出生年月],getdate())BETWEEN61AND70THEN1ELSE0END)AS'61-70'

FROMtb

/*

16--3031-4041-5051-6061-70

------------------------------------------------------------------

031001

(1行受影响)

*/

create table brands(id int,brand varchar(10), address varchar(10))

insert into brands values(1 ,'联想', '北京')

insert into brands values(2 ,'惠普', '美国')

insert into brands values(3 ,'神舟', '深圳')

create table products(id int, brand int, name varchar(10))

insert into products values(1 ,1, '联想1')

insert into products values(2 ,1, '联想2')

insert into products values(3 ,2, '惠普1')

insert into products values(4 ,2, '惠普2'

) insertinto products values(5 ,1, '联想3')

insertinto products values(6 ,3, '神舟1')

insertinto products values(7 ,1, '联想4')

go

selectID=row_number()over(orderbygetdate()),

b.产品数量,

a.[brand],

a.[address]

frombrandsa,

(select[brand],

count([brand])产品数量

fromproducts

groupby[brand])b

wherea.[ID]=b.[brand]

orderbyb.产品数量desc

selectb.id,tas产品数量,b.brand,b.address

frombrandsb

join

(

selectbrand,count(brand)cnt

fromproducts

groupbybrand

)b1

onb1.brand=b.id

id产品数量brandaddress

----------------------------------------------------------------------------------

14联想北京

22惠普美国

31神舟深圳

(3行受影响)

select

sum(casewhen(字段名>0and字段名<4000)then1else0end)别名,

sum(casewhen字段名>=4000and字段名<8000then1else0end)别名,

sum(casewhen字段名>=8000then1else0end)别名,

count(*)astotalfrom表名

如果觉得《SQL 年龄段 品牌分类 分组统计》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。