具体表如下:
ID 业务名 动作类型 操作者 时间
1 游戏 增加 PPP 2007-01-01
2 游戏 删除 UUU 2007-01-02
3 体育 增加 PPP 2007-02-02
4 娱乐 删除 PPP 2007-02-03
5 体育 删除 PPP 2007-02-09
6 体育 删除 TTT 2007-03-03
7 跑步 增加 SSS 2007-03-20
8 运动 删除 AAA 2007-05-20
......说明:这是一个动作记录表,记录了业务名为XX被删除或者增加的动作事件
写SQL语句:
1,把所有的业务按增加次数从大到小给排列出来,并且给出这个业务的删除次数
如下所示:
序号 业务名 增加次数 删除次数
1 游戏 2118 1250
2 体育 1935 1322
4 运动 1850 1222
5 娱乐 1771 1752
......2,把所有的业务按动作类型的次数从大到小给排列出来,这个动作次数包括增加和删除
序号 业务名 动作次数
1 游戏 3842
2 娱乐 3502
3 体育 3122
4 运动 3001
......
各位高手帮帮忙,我写了2天了也没把SQL语句写出来。
ID 业务名 动作类型 操作者 时间
1 游戏 增加 PPP 2007-01-01
2 游戏 删除 UUU 2007-01-02
3 体育 增加 PPP 2007-02-02
4 娱乐 删除 PPP 2007-02-03
5 体育 删除 PPP 2007-02-09
6 体育 删除 TTT 2007-03-03
7 跑步 增加 SSS 2007-03-20
8 运动 删除 AAA 2007-05-20
......说明:这是一个动作记录表,记录了业务名为XX被删除或者增加的动作事件
写SQL语句:
1,把所有的业务按增加次数从大到小给排列出来,并且给出这个业务的删除次数
如下所示:
序号 业务名 增加次数 删除次数
1 游戏 2118 1250
2 体育 1935 1322
4 运动 1850 1222
5 娱乐 1771 1752
......2,把所有的业务按动作类型的次数从大到小给排列出来,这个动作次数包括增加和删除
序号 业务名 动作次数
1 游戏 3842
2 娱乐 3502
3 体育 3122
4 运动 3001
......
各位高手帮帮忙,我写了2天了也没把SQL语句写出来。
增加次数=sum(case when 动作类型='增加' then 1 else 0 end),
删除次数=sum(case when 动作类型='删除' then 1 else 0 end)
into #
from tb
group 业务名select id=identity(int,1,1),*
from #
order by 增加次数 desc,删除次数 desc
from tb
group by 业务名select id=identity(int,1,1),*
from #
order by 动作次数 desc
增加次数=sum(case when 动作类型='增加' then 1 else 0 end),
删除次数=sum(case when 动作类型='删除' then 1 else 0 end)
into #1
from tb
group 业务名select id=identity(int,1,1),* into #2
from #
order by 增加次数 desc,删除次数 descselect * from #2--2select 业务名,count(*) 动作次数 into #3
from tb
group by 业务名select id=identity(int,1,1),* into #4
from #
order by 动作次数 descselect * from #4
insert into tb values(1, '游戏', '增加', 'PPP', '2007-01-01')
insert into tb values(2, '游戏', '删除', 'UUU', '2007-01-02')
insert into tb values(3, '体育', '增加', 'PPP', '2007-02-02')
insert into tb values(4, '娱乐', '删除', 'PPP', '2007-02-03')
insert into tb values(5, '体育', '删除', 'PPP', '2007-02-09')
insert into tb values(6, '体育', '删除', 'TTT', '2007-03-03')
insert into tb values(7, '跑步', '增加', 'SSS', '2007-03-20')
insert into tb values(8, '运动', '删除', 'AAA', '2007-05-20')
goselect 业务名,
sum(case 动作类型 when '增加' then 1 else 0 end) '增加次数',
sum(case 动作类型 when '删除' then 1 else 0 end) '删除次数'
from tb
group by 业务名
order by 增加次数 desc
/*
业务名 增加次数 删除次数
---------- ----------- -----------
跑步 1 0
体育 1 2
游戏 1 1
娱乐 0 1
运动 0 1(5 行受影响)
*/select 业务名, 动作次数 = count(*) from tb group by 业务名 order by 动作次数 desc
/*
业务名 动作次数
---------- -----------
体育 3
游戏 2
娱乐 1
运动 1
跑步 1(5 行受影响)
*/drop table tb
select 业务名,
增加次数=sum(case when 动作类型='增加' then 1 else 0 end),
删除次数=sum(case when 动作类型='删除' then 1 else 0 end)
from tb group by 业务名
order by sum(case when 动作类型='增加' then 1 else 0 end) desc
--2
select 业务名,动作次数=count(1)
from tb group by 业务名
order by count(1) desc
1、
select id=identity(int,1,1),业务名,增加次数=sum(case when 动作类型='增加' then 1 else 0 end),删除次数=sum(case when 动作类型='删除' then 1 else 0 end) into #temp from 表 group by 业务名 select * from #temp order by 增加次数 desc2、
select id=identity(int,1,1),业务名,count(*) 动作次数 into #temp from 表 group by 业务名select * from #temp order by 动作次数 desc
1、
select id=identity(int,1,1),业务名,增加次数=sum(case when 动作类型='增加' then 1 else 0 end),删除次数=sum(case when 动作类型='删除' then 1 else 0 end) into #temp from 表 group by 业务名 order by 增加次数 descselect * from #temp 2、
select id=identity(int,1,1),业务名,count(*) 动作次数 into #temp1 from 表 group by 业务名 order by 动作次数 descselect * from #temp1
insert into tb values(1, '游戏', '增加', 'PPP', '2007-01-01')
insert into tb values(2, '游戏', '删除', 'UUU', '2007-01-02')
insert into tb values(3, '体育', '增加', 'PPP', '2007-02-02')
insert into tb values(4, '娱乐', '删除', 'PPP', '2007-02-03')
insert into tb values(5, '体育', '删除', 'PPP', '2007-02-09')
insert into tb values(6, '体育', '删除', 'TTT', '2007-03-03')
insert into tb values(7, '跑步', '增加', 'SSS', '2007-03-20')
insert into tb values(8, '运动', '删除', 'AAA', '2007-05-20')
go
--1
select 业务名,
增加次数=sum(case when 动作类型='增加' then 1 else 0 end),
删除次数=sum(case when 动作类型='删除' then 1 else 0 end)
from tb group by 业务名
order by 增加次数 desc
--2
select 业务名,动作次数=count(1)
from tb group by 业务名
order by 动作次数 descdrop table tb/*
业务名 增加次数 删除次数
---------- ----------- -----------
跑步 1 0
体育 1 2
游戏 1 1
娱乐 0 1
运动 0 1(5 row(s) affected)业务名 动作次数
---------- -----------
体育 3
游戏 2
娱乐 1
运动 1
跑步 1(5 row(s) affected)
*/
create table tb(ID int, 业务名 varchar(10), 动作类型 varchar(10), 操作者 varchar(10), 时间 varchar(10))
insert into tb values(1, '游戏', '增加', 'PPP', '2007-01-01')
insert into tb values(2, '游戏', '删除', 'UUU', '2007-01-02')
insert into tb values(3, '体育', '增加', 'PPP', '2007-02-02')
insert into tb values(4, '娱乐', '删除', 'PPP', '2007-02-03')
insert into tb values(5, '体育', '删除', 'PPP', '2007-02-09')
insert into tb values(6, '体育', '删除', 'TTT', '2007-03-03')
insert into tb values(7, '跑步', '增加', 'SSS', '2007-03-20')
insert into tb values(8, '运动', '删除', 'AAA', '2007-05-20')
go
SELECT 序号 =(SELECT COUNT(增加次数) FROM
(
select 业务名,
sum(case 动作类型 when '增加' then 1 else 0 end) '增加次数',
sum(case 动作类型 when '删除' then 1 else 0 end) '删除次数'
from tb
group by 业务名
) t
where 增加次数 > m.增加次数) + 1 , * from
(
select 业务名,
sum(case 动作类型 when '增加' then 1 else 0 end) '增加次数',
sum(case 动作类型 when '删除' then 1 else 0 end) '删除次数'
from tb
group by 业务名
) m
order by 序号/*
序号 业务名 增加次数 删除次数
----------- ---------- ----------- -----------
1 跑步 1 0
1 体育 1 2
1 游戏 1 1
4 娱乐 0 1
4 运动 0 1(5 行受影响)
*/
SELECT 序号 =(SELECT COUNT(动作次数) FROM
(
select 业务名, 动作次数 = count(*) from tb group by 业务名
) t
where 动作次数 > m.动作次数) + 1 , * from
(
select 业务名, 动作次数 = count(*) from tb group by 业务名
) m
order by 序号/*
序号 业务名 动作次数
----------- ---------- -----------
1 体育 3
2 游戏 2
3 娱乐 1
3 运动 1
3 跑步 1(5 行受影响)
*/drop table tb
create table tb(ID int, 业务名 varchar(10), 动作类型 varchar(10), 操作者 varchar(10), 时间 varchar(10))
insert into tb values(1, '游戏', '增加', 'PPP', '2007-01-01')
insert into tb values(2, '游戏', '删除', 'UUU', '2007-01-02')
insert into tb values(3, '体育', '增加', 'PPP', '2007-02-02')
insert into tb values(4, '娱乐', '删除', 'PPP', '2007-02-03')
insert into tb values(5, '体育', '删除', 'PPP', '2007-02-09')
insert into tb values(6, '体育', '删除', 'TTT', '2007-03-03')
insert into tb values(7, '跑步', '增加', 'SSS', '2007-03-20')
insert into tb values(8, '运动', '删除', 'AAA', '2007-05-20')
go
SELECT 序号 = row_number() over(order by 增加次数 desc) , * FROM
(
select 业务名,
sum(case 动作类型 when '增加' then 1 else 0 end) '增加次数',
sum(case 动作类型 when '删除' then 1 else 0 end) '删除次数'
from tb
group by 业务名
) t
order by 序号/*
序号 业务名 增加次数 删除次数
-------------------- ---------- ----------- -----------
1 跑步 1 0
2 体育 1 2
3 游戏 1 1
4 娱乐 0 1
5 运动 0 1(5 行受影响)
*/
SELECT 序号 = row_number() over(order by 动作次数 desc) , * FROM
(
select 业务名, 动作次数 = count(*) from tb group by 业务名
) t
order by 序号/*
序号 业务名 动作次数
-------------------- ---------- -----------
1 体育 3
2 游戏 2
3 娱乐 1
4 运动 1
5 跑步 1(5 行受影响)
*/drop table tb
insert into @tb select 1,'游戏','增加','ppp','2007-01-01'
insert into @tb select 2,'游戏','删除','uuu','2007-01-02'
insert into @tb select 3,'体育','增加','ppp','2007-02-02'
insert into @tb select 4,'娱乐','删除','ppp','2007-02-03'
insert into @tb select 5,'体育','删除','ppp','2007-02-09'
insert into @tb select 6,'体育','删除','ttt','2007-03-03'
insert into @tb select 7,'跑步','增加','sss','2007-03-20'
insert into @tb select 8,'运动','删除','aaa','2007-05-20'select id=identity(int,1,1),* into # from (
select yewu,
sum(case when dongzuo='增加' then 1 else 0 end) as [增加次数],
sum(case when dongzuo='删除' then 1 else 0 end) as [删除次数]
from @tb a group by yewu)aselect * from #id yewu 增加次数 删除次数
1 跑步 1 0
2 体育 1 2
3 游戏 1 1
4 娱乐 0 1
5 运动 0 1