SQL Server中是否有用于计算百分比的内置函数
我在%模式下编写SQL查询以获取结果时遇到了一个问题,我熟悉SQL Server的SQL Server中是否有用于计算百分比的内置函数,sql,sql-server,percentage,Sql,Sql Server,Percentage,我在%模式下编写SQL查询以获取结果时遇到了一个问题,我熟悉SQL Server的SUM()和COUNT()函数,但在查询内部实现逻辑时遇到了一个问题,我希望得到以下形式的结果:- UserName--- % of AccepectResult---- % of RejectResult 我的表结构是这样的,有两列Name(用户名)和Result: NAME Result --------------- USer1 A USer1 A USer1
SUM()
和COUNT()
函数,但在查询内部实现逻辑时遇到了一个问题,我希望得到以下形式的结果:-
UserName--- % of AccepectResult---- % of RejectResult
我的表结构是这样的,有两列Name
(用户名)和Result
:
NAME Result
---------------
USer1 A
USer1 A
USer1 A
USer1 R
USer1 R
USer1 A
USer2 A
USer2 A
USer2 A
USer2 A
USer2 R
A - Accepted Result
R - Rejected Result
我试着这样写这个查询
select * into #t1 from
(
select UserName , count(Result) as Acc
from Test where result = 'A'
group by UserName
) as tab1
select * into #t2 from
(
select UserName , count(Result) as Rej
from Test where result = 'R'
group by UserName
) as tab2
select #t1.UserName ,
#t1.Acc ,
#t2.Rej ,
(#t1.Acc)*100/(#t1.Acc + #t2.Rej) as AccPercentage,
(#t2.Rej)*100/(#t1.Acc + #t2.Rej) as RejPercentage
from #t1
inner join #t2 on #t1.UserName = #t2.UserName
drop table #t1
drop table #t2
有没有其他方法可以编写此查询以及SQL Server中用于计算百分比的内置函数?没有。你必须乘以100,然后明确地将两个数字除以。不,没有。您必须乘以100,然后将两个数字明确地除掉。您不需要加入表。相反,您可以像这样使用
SUM
或COUNT
函数:
使用SUM
函数:
SELECT Name, 100 *
SUM(CASE WHEN Result = 'A' THEN 1 ELSE 0 END)/COUNT(result)
AS Accept_percent
,100 *
SUM(CASE WHEN Result = 'R' THEN 1 ELSE 0 END)/COUNT(result)
AS Reject_percent
FROM t
Group by Name;
SELECT Name, 100 *
COUNT(CASE WHEN Result = 'A' THEN 1 ELSE NULL END)/COUNT(result)
AS Accept_percent
,100 *
COUNT(CASE WHEN Result = 'R' THEN 1 ELSE NULL END)/COUNT(result)
AS Reject_percent
FROM t
Group by Name;
或使用COUNT
功能:
SELECT Name, 100 *
SUM(CASE WHEN Result = 'A' THEN 1 ELSE 0 END)/COUNT(result)
AS Accept_percent
,100 *
SUM(CASE WHEN Result = 'R' THEN 1 ELSE 0 END)/COUNT(result)
AS Reject_percent
FROM t
Group by Name;
SELECT Name, 100 *
COUNT(CASE WHEN Result = 'A' THEN 1 ELSE NULL END)/COUNT(result)
AS Accept_percent
,100 *
COUNT(CASE WHEN Result = 'R' THEN 1 ELSE NULL END)/COUNT(result)
AS Reject_percent
FROM t
Group by Name;
或者使用子查询
:
SELECT Name, 100 *
(SELECT COUNT(result) FROM t WHERE result='A' And Name = main.Name)/COUNT(result)
AS Accept_percent
, 100 *
(SELECT COUNT(result) FROM t WHERE result='R' And Name = main.Name)/COUNT(result)
AS Reject_percent
FROM t main
Group by Name;
您不需要联接表。相反,您可以像这样使用
SUM
或COUNT
函数:
使用SUM
函数:
SELECT Name, 100 *
SUM(CASE WHEN Result = 'A' THEN 1 ELSE 0 END)/COUNT(result)
AS Accept_percent
,100 *
SUM(CASE WHEN Result = 'R' THEN 1 ELSE 0 END)/COUNT(result)
AS Reject_percent
FROM t
Group by Name;
SELECT Name, 100 *
COUNT(CASE WHEN Result = 'A' THEN 1 ELSE NULL END)/COUNT(result)
AS Accept_percent
,100 *
COUNT(CASE WHEN Result = 'R' THEN 1 ELSE NULL END)/COUNT(result)
AS Reject_percent
FROM t
Group by Name;
或使用COUNT
功能:
SELECT Name, 100 *
SUM(CASE WHEN Result = 'A' THEN 1 ELSE 0 END)/COUNT(result)
AS Accept_percent
,100 *
SUM(CASE WHEN Result = 'R' THEN 1 ELSE 0 END)/COUNT(result)
AS Reject_percent
FROM t
Group by Name;
SELECT Name, 100 *
COUNT(CASE WHEN Result = 'A' THEN 1 ELSE NULL END)/COUNT(result)
AS Accept_percent
,100 *
COUNT(CASE WHEN Result = 'R' THEN 1 ELSE NULL END)/COUNT(result)
AS Reject_percent
FROM t
Group by Name;
或者使用子查询
:
SELECT Name, 100 *
(SELECT COUNT(result) FROM t WHERE result='A' And Name = main.Name)/COUNT(result)
AS Accept_percent
, 100 *
(SELECT COUNT(result) FROM t WHERE result='R' And Name = main.Name)/COUNT(result)
AS Reject_percent
FROM t main
Group by Name;
试着这样做:
select username, (100 * sum(case result when 'A' then 1 else 0 end) / count(*)) as accepted,
(100 * sum(case result when 'R' then 1 else 0 end) / count(*)) as rejected
from test
group by username
试着这样做:
select username, (100 * sum(case result when 'A' then 1 else 0 end) / count(*)) as accepted,
(100 * sum(case result when 'R' then 1 else 0 end) / count(*)) as rejected
from test
group by username