111,119
社区成员
发帖
与我相关
我的任务
分享
select [name],avg(a),avg(b),avg(c),
rtrim(round(convert(float,count(case when d<=4 then '1' end))/count(*)*100,0))+'%',
rtrim(round(convert(float,count(case when d>4 then '1' end))/count(*)*100,0))+'%'
from testa group by [name]
select name, avg(a) as 'a平均',avg(b) as 'b平均',avg(c) as 'c平均',str((select count(*) from a where d>4 )*100/(select count(*) from a ))+'%' as 'd大于4',str((select count(*) from a where d<=4 )*100/(select count(*) from a))+'%' as 'd小于等于4' from a group by name
select name, avg(a) as 'a平均',avg(b) as 'b平均',avg(c) as 'c平均',str((select count(*) from a where d>4 )*100/(select count(*) from a ))+'%' as 'd大于4',str((select count(*) from a where d<=4 )*100/(select count(*) from a))+'%' as 'd小于等于4' from a group by name
select [name],avg(a),avg(b),avg(c),
rtrim(convert(char,(convert(float,count(case when d<=4 then '1' end))/count(*)*100)))+'%',
rtrim(convert(char,(convert(float,count(case when d>4 then '1' end))/count(*)*100)))+'%'
from testa group by [name]
select [name],avg(a),avg(b),avg(c),
rtrim(convert(char,(convert(float,count(case when d<=4 then '1' end))/convert(float,count(*))*100.00)))+'%',
rtrim(convert(char,(convert(float,count(case when d>4 then '1' end))/convert(float,count(*))*100.00)))+'%'
from testa group by [name]
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'a')
BEGIN
DROP TABLE A
END
GO
CREATE TABLE a
(
name VARCHAR(10),
a INT,
b INT,
c INT,
d INT
)
GO
INSERT INTO a
SELECT '001', 1, 2, 3, 4 UNION
SELECT '001', 5, 6, 7, 4 UNION
SELECT '001', 2, 3, 4, 8 UNION
SELECT '002', 1, 2, 3, 4 UNION
SELECT '002', 3, 2, 2, 5 UNION
SELECT '003', 2, 2, 2, 4
GO
WITH t AS
(SELECT name,SUM(a) / CAST(COUNT(1) AS DECIMAL(10,2)) AS avga,SUM(b) / CAST(COUNT(1) AS DECIMAL(10,2)) AS avgb,SUM(c) / CAST(COUNT(1) AS DECIMAL(10,2)) AS avgc,SUM(CASE WHEN d <= 4 THEN 1 ELSE 0 END) AS small4,SUM(CASE WHEN d > 4 THEN 1 ELSE 0 END) AS big4
FROM a
GROUP BY name),
m AS
(
SELECT name,avga,avgb,avgc,RTRIM(small4 * 100 / (small4 + big4)) + '%' as small4,RTRIM(big4 * 100 / (small4 + big4)) + '%' as big4
FROM t
)
SELECT * FROM m
UNION
SELECT '总计',avg(t.avga),avg(T.avgb),avg(T.avgc),RTRIM(SUM(t.small4) * 100 / (SUM(t.small4) + SUM(t.big4))) + '%' as small4,RTRIM(SUM(t.big4) * 100 / (SUM(t.small4) + SUM(t.big4))) + '%' as big4
FROM t
name avga avgb avgc small4 big4
001 2.66666666666 3.66666666666 4.66666666666 66% 33%
002 2.00000000000 2.00000000000 2.50000000000 50% 50%
003 2.00000000000 2.00000000000 2.00000000000 100% 0%
总计 2.22222222222 2.55555555555 3.05555555555 66% 33%
select name,
avg(a),
avg(b),
avg(c),
(select count(*)
from a
where name = t.name
and d <= 4) / (select count(*)
from a
where name = t.name)
from a t
group by name