[SQL] PostgreSQL을 - SQL - 'TRUE'값의 계산
SQLPostgreSQL을 - SQL - 'TRUE'값의 계산
myCol
------
true
true
true
false
false
null
위의 표에서, 내가 할 경우 :
select count(*), count(myCol);
나는 6, 5를 얻을 수
이 널 항목을 계산하지 않는 한 나는 5를 얻을.
어떻게도 마찬가지 값의 수 (예 3)을 계산합니까?
(이것은 단순화하고 실제로 카운트 기능에서 훨씬 더 복잡한 표현을 사용하고 있습니다)
편집 요약 : 나는 또한, 쿼리에서 일반 COUNT (*)를 포함 할 그래서 where 절을 사용할 수 없습니다
해결법
-
==============================
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.정수 및 합계 부울 캐스트.
정수 및 합계 부울 캐스트.
SELECT count(*),sum(myCol::int);
당신은 6,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.아마 가장 좋은 방법은 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.짧고 (주조)없이 게으른 용액 수식을 사용하는 것이다 :
짧고 (주조)없이 게으른 용액 수식을 사용하는 것이다 :
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.간단히 정수에 부울 필드를 변환 합을한다. 이것은 PostgreSQL의에서 작동합니다 :
간단히 정수에 부울 필드를 변환 합을한다. 이것은 PostgreSQL의에서 작동합니다 :
select sum(myCol::int) from <table name>
희망이 도움이!
-
==============================
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.
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.
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
from https://stackoverflow.com/questions/5396498/postgresql-sql-count-of-true-values by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버와 마지막 행을 읽는 방법 (0) | 2020.06.04 |
---|---|
[SQL] SQL ROW_NUMBER () WHERE 절에 기능 (0) | 2020.06.04 |
[SQL] 왜 내 SQL 키워드를 대문자로해야합니까? [복제] (0) | 2020.06.04 |
[SQL] SSRS보고에 어떻게 형식의 날짜와 시간을합니까? (0) | 2020.06.04 |
[SQL] 다음 이벤트 날짜를 표시합니다 (0) | 2020.06.04 |