我想这是一个非常简单的问题,但我无法在这里找到答案!
我试图根据WHERE子句计算记录量,并根据相同的where子句返回这些记录的百分比。百分比将根据数据库中的记录总数计算。例如,我计算所有符合" MyCondition":
的记录SELECT COUNT(*) FROM [MyTable]
WHERE Condition='MyCondition'
这很好用。但是,如何计算,并返回与数据库中的所有记录相对应的百分比?换句话说,我想看到有多少记录符合WHERE条件=' MyCondition'关于总记录数。
抱歉这个简单的问题和TIA!我正在使用MS SQL 2012。
答案 0 :(得分:3)
这是另一种只触及基表一次的方法。
SELECT COUNT(*) as TotalCount
,SUM(case when Condition = 'MyCondition' then 1 else 0 end) as ConditionalCount
FROM [MyTable]
答案 1 :(得分:2)
您可以简单地将计数的匹配除以记录总数。
示例数据:
create table test (MatchColumn int)
insert into test (MatchColumn)
values (1),(1),(1),(2),(3),(4)
匹配条件:
SELECT COUNT(*) MatchValues,
(SELECT COUNT(*) FROM test) TotalRecords,
CAST(COUNT(*) AS FLOAT)/CAST((SELECT COUNT(*) FROM test) AS FLOAT)*100 Percentage
FROM [test]
WHERE MatchColumn=1
<强>返回:强>
| MATCHVALUES | TOTALRECORDS | PERCENTAGE |
|-------------|--------------|------------|
| 3 | 6 | 50 |
使用CTE:
另一个选择是使用 CTE 执行相同操作并引用它创建的列:
;WITH CTE AS
(SELECT COUNT(*) MatchValues,
(SELECT COUNT(*) FROM test) TotalRecords
FROM [test]
WHERE MatchColumn=1)
SELECT MatchValues, TotalRecords,
CAST(MatchValues AS FLOAT)/CAST(TotalRecords AS FLOAT)*100 Percentage
FROM CTE
注意:需要将计数转换为float
以计算百分比,因为除以2 int
个值将返回int
,但在这种情况下我们想要一个小于0的十进制值,如果它是int
,那么它就是0。
参考:
答案 2 :(得分:0)
或类似的东西。
create table test (MatchColumn int)
insert into test (MatchColumn)
values (1),(1),(1),(2),(3),(4)
SELECT
(SELECT COUNT(*) FROM test WHERE MatchColumn=1) MatchValues,
(SELECT COUNT(*) FROM test) TotalRecords,
((SELECT CAST(COUNT(*) AS FLOAT) FROM test WHERE MatchColumn=1)/CAST((SELECT COUNT(*) FROM test) AS FLOAT)*100) Percentage