SQL Count操作

时间:2018-04-21 00:52:57

标签: sql postgresql

我有2个查询使用相同的表:总计,我需要评估结果的百分比。 (Postgres 9.4)

SELECT COUNT(*) FROM total
SELECT COUNT(*) FROM total WHERE field1 = False

示例:

  • 总计数没有过滤器返回100行
  • Total with field1 = False返回10行。

我需要得到10%,这意味着满足特定条件的百分比。 100/10 在SQL中计算这个条件的最佳方法是什么?

SELECT * FROM (
SELECT COUNT(*) FROM total /
SELECT COUNT(*) FROM total WHERE field1 = False ) 

3 个答案:

答案 0 :(得分:2)

SELECT COUNT(CASE 
               WHEN field1=false THEN 1 
             END) / COUNT(*)*100 AS percentage 
FROM table

您可以使用案例表达式

来使用条件聚合

答案 1 :(得分:2)

我会这样做:

select avg(case when field = false then 100.0 else 0 end) as percentage
from total;

假设field不是NULL,您也可以这样做:

select avg( (not field)::int ) * 100 as percentage
from total;

答案 2 :(得分:1)

如果field1列为BOOLEN类型,则还有另一种很酷的方式

您可以使用SUM这样的功能。

SELECT SUM((NOT field1)::INT) * 100/SUM(1) percentage 
FROM total

sqlfiddle:http://sqlfiddle.com/#!15/eb9fd1/21