添加两个不同的SQL Count Queries

时间:2013-11-12 10:22:06

标签: sql sql-server

我正在使用SQL Server 2008,我有两个单独的Count查询。我想将两个查询分开并乘以100得到一个百分比。

两个查询

SELECT COUNT(*) FROM
 (
     SELECT * FROM admin WHERE principal LIKE '%Mrs%'
     UNION
     SELECT * FROM admin where deputy_principal LIKE '%Mrs%'
) as Count1

SELECT COUNT(*) * 2 FROM admin as Count2

我尝试过这样的事情:

SELECT(
         SELECT COUNT(*) FROM
                  (
                       SELECT * FROM admin WHERE principal LIKE '%Mrs%'
                       UNION
                       SELECT * FROM admin where deputy_principal LIKE '%Mrs%'
                   )
             /

                  (
                       SELECT COUNT(*) * 2 FROM admin as Count2
                  )
       )

但我得到语法错误,我无法正确调试。这是解决这个问题的正确方法吗?

它应该将Count1和Count2除以然后乘以100并将其显示为:

37%

7 个答案:

答案 0 :(得分:3)

SELECT
    ((SELECT CAST(COUNT(*) AS DECIMAL(18,2)) FROM admin WHERE principal LIKE '%Mrs%' 
         OR deputy_principal LIKE '%Mrs%') / 
    (SELECT CAST(COUNT(*) * 2 AS DECIMAL(18,2)) FROM admin)) * 100

更新:比较原始方法与虚拟数据....

DECLARE @admin TABLE(Id INTEGER IDENTITY(1,1), principal VARCHAR(50), 
    deputy_principal VARCHAR(50))
INSERT @admin (principal, deputy_principal)
VALUES ('Mr Person 1', 'Mr Person 2'),
        ('Mrs Person 3', 'Mr Person 4'),
        ('Mr Person 5', 'Mrs Person 6'),
        ('Mrs Person 7', 'Mrs Person 8')

-- Original attempted way (syntax corrected)        
SELECT ((
    SELECT CAST(COUNT(*) AS DECIMAL(18,2))
    FROM
    (
       SELECT * FROM @admin WHERE principal LIKE '%Mrs%'
       UNION
       SELECT * FROM @admin where deputy_principal LIKE '%Mrs%'
   ) x)
   /
   (SELECT CAST(COUNT(*) * 2 AS DECIMAL(18,2)) FROM @admin)) * 100

-- Shortened query      
SELECT
((SELECT CAST(COUNT(*) AS DECIMAL(18,2)) FROM @admin WHERE principal LIKE '%Mrs%' 
     OR deputy_principal LIKE '%Mrs%') / 
(SELECT CAST(COUNT(*) * 2 AS DECIMAL(18,2)) FROM @admin)) * 100

两者都输出相同的结果:本例中为37.5

答案 1 :(得分:2)

您可以使用CASE ExpressionSUM() Function尝试以下内容:

SELECT  SUM(CASE WHEN principal LIKE '%Mrs%' OR 
                 deputy_principal LIKE '%Mrs%' THEN 100.0 END) / SUM(2) Pecentage
FROM admin

Fiddle demo 使用@AdaTheDev的数据

答案 2 :(得分:1)

你可以像这样一次完成所有这些, fiddle here

 SELECT
    CONVERT(
        VARCHAR(10),
        (
            CONVERT(Real, SUM(Mrs))
        /
            CONVERT(Real, COUNT(*))
        ) * 100
    ) + '%'
    [DoubledUpMrsPercentage]
FROM (
    SELECT
        CASE
            WHEN [principal] LIKE '%Mrs%' OR
                [deputy_principal] LIKE '%Mrs%' THEN 1
            ELSE 0
        END Mrs
    FROM
        [admin]
      ) Flags;

答案 3 :(得分:1)

select 
cast(
  sum(case when principal LIKE '%Mrs%' then 50.0 else 0 end +
      case when deputy_principal LIKE '%Mrs%' then 50.0 else 0 end)
  / count(*)
 as decimal(5,2)) as percnt
from admin

答案 4 :(得分:1)

Select Cast(a*100 as int)/b
from (
select count(*) a
from ERP_FMS_ChartOfAccount where CategoryID = 2)t1,
(
Select count(*) b
From ERP_FMS_ChartOfAccount where CategoryID = 1)t2

答案 5 :(得分:0)

declare @firstquerycount as integer;
declare @secondquerycount as integer;

SELECT @firstquerycount=count(*) FROM admin WHERE principal LIKE '%Mrs%';
SELECT @secondquerycount=count(*) FROM admin where deputy_principal LIKE '%Mrs%';

现在firstquerycount和secondquerycount保存各自querry的相应计数值。现在您可以根据您的要求使用它们,如

select convert(varchar(10),(((@firstquerycount+@secondquerycount)/2)*100))+'%'

注意我没有尝试此查询,请根据您的要求进行更改

答案 6 :(得分:0)

SELECT princi, total, (princi*100)/CAST(total AS REAL)
FROM
(SELECT COUNT(CASE WHEN principal LIKE '%Mrs%' 
 OR deputy_principal LIKE '%Mrs%'
 THEN 1 END), COUNT(*)*2
FROM admin) AS X(princi,total)