복붙노트

[SQL] PostgreSQL을 - SQL - 'TRUE'값의 계산

SQL

PostgreSQL을 - SQL - 'TRUE'값의 계산

myCol
------
 true
 true
 true
 false
 false
 null

위의 표에서, 내가 할 경우 :

select count(*), count(myCol);

나는 6, 5를 얻을 수

이 널 항목을 계산하지 않는 한 나는 5를 얻을.

어떻게도 마찬가지 값의 수 (예 3)을 계산합니까?

(이것은 단순화하고 실제로 카운트 기능에서 훨씬 더 복잡한 표현을 사용하고 있습니다)

편집 요약 : 나는 또한, 쿼리에서 일반 COUNT (*)를 포함 할 그래서 where 절을 사용할 수 없습니다

해결법

  1. ==============================

    1.

    SELECT COALESCE(sum(CASE WHEN myCol THEN 1 ELSE 0 END),0) FROM <table name>
    

    또는, 당신은 자신에 대한 발견과 같습니다 :

    SELECT count(CASE WHEN myCol THEN 1 END) FROM <table name>
    
  2. ==============================

    2.정수 및 합계 부울 캐스트.

    정수 및 합계 부울 캐스트.

    SELECT count(*),sum(myCol::int);
    

    당신은 6,3를 얻을.

  3. ==============================

    3.PostgreSQL의 9.4 이후 실제 값을 계산하는 아주 간결한 쿼리 수있는 FILTER 절은있다 :

    PostgreSQL의 9.4 이후 실제 값을 계산하는 아주 간결한 쿼리 수있는 FILTER 절은있다 :

    select count(*) filter (where myCol)
    from tbl;
    

    위의 쿼리 절은 충분 그 간단한의 나쁜 예이며, 구문 만 보여입니다. 어디 FILTER 절은 빛나는 것은 다른 집계과 결합하기 쉽다는 점이다 :

    select count(*), -- all
           count(myCol), -- non null
           count(*) filter (where myCol) -- true
    from tbl;
    

    단일 쿼리에서 다르게 필터링 집계를 가져올 수 있도록하면서 절은 술어와 같은 다른 열을 사용하는 열에 집계에 특히 유용합니다 :

    select count(*),
           sum(otherCol) filter (where myCol)
    from tbl;
    
  4. ==============================

    4.아마 가장 좋은 방법은 NULLIF 기능을 사용하는 것입니다.

    아마 가장 좋은 방법은 NULLIF 기능을 사용하는 것입니다.

    대개

    select
        count(nullif(myCol = false, true)),  -- count true values
        count(nullif(myCol = true, true)),   -- count false values
        count(myCol);
    

    또는 짧은

    select
        count(nullif(myCol, true)),  -- count false values
        count(nullif(myCol, false)), -- count true values
        count(myCol);
    

    http://www.postgresql.org/docs/9.0/static/functions-conditional.html

  5. ==============================

    5.짧고 (주조)없이 게으른 용액 수식을 사용하는 것이다 :

    짧고 (주조)없이 게으른 용액 수식을 사용하는 것이다 :

    SELECT COUNT(myCol OR NULL) FROM myTable;
    

    스스로를보십시오 :

    SELECT COUNT(x < 7 OR NULL)
       FROM GENERATE_SERIES(0,10) t(x);
    

    보다 동일한 결과를 얻을

    SELECT SUM(CASE WHEN x < 7 THEN 1 ELSE 0 END)
       FROM GENERATE_SERIES(0,10) t(x);
    
  6. ==============================

    6.간단히 정수에 부울 필드를 변환 합을한다. 이것은 PostgreSQL의에서 작동합니다 :

    간단히 정수에 부울 필드를 변환 합을한다. 이것은 PostgreSQL의에서 작동합니다 :

    select sum(myCol::int) from <table name>
    

    희망이 도움이!

  7. ==============================

    7.MySQL은, 당신은뿐만 아니라이 작업을 수행 할 수 있습니다

    MySQL은, 당신은뿐만 아니라이 작업을 수행 할 수 있습니다

    SELECT count(*) AS total
         , sum(myCol) AS countTrue --yes, you can add TRUEs as TRUE=1 and FALSE=0 !!
    FROM yourTable
    ;
    

    내가 생각 포스트 그레스에서,이 작품 :

    SELECT count(*) AS total
         , sum(myCol::int) AS countTrue --convert Boolean to Integer
    FROM yourTable
    ;
    

    이상 (피하려면 :: 표준 SQL 구문을 사용) :

    SELECT count(*) AS total
         , sum(CAST(myCol AS int)) AS countTrue --convert Boolean to Integer
    FROM yourTable
    ;
    
  8. ==============================

    8.

    select f1,
           CASE WHEN f1 = 't' THEN COUNT(*) 
                WHEN f1 = 'f' THEN COUNT(*) 
                END AS counts,
           (SELECT COUNT(*) FROM mytable) AS total_counts
    from mytable
    group by f1
    

    아니면이

    SELECT SUM(CASE WHEN f1 = 't' THEN 1 END) AS t,
           SUM(CASE WHEN f1 = 'f' THEN 1 END) AS f,
           SUM(CASE WHEN f1 NOT IN ('t','f') OR f1 IS NULL THEN 1 END) AS others,
           SUM(CASE WHEN f1 IS NOT NULL OR f1 IS NULL THEN 1 ELSE 0 END) AS total_count
    FROM mytable;
    
  9. ==============================

    9.

    SELECT count(*)         -- or count(myCol)
    FROM   <table name>     -- replace <table name> with your table
    WHERE  myCol = true;
    

    여기에 윈도우 화 기능과 방법이있다 :

    SELECT DISTINCT *, count(*) over(partition by myCol)
    FROM   <table name>;
    
    -- Outputs:
    -- --------------
    -- myCol | count
    -- ------+-------
    --  f    |  2
    --  t    |  3
    --       |  1
    
  10. from https://stackoverflow.com/questions/5396498/postgresql-sql-count-of-true-values by cc-by-sa and MIT license