[SQL] 같은 SELECT SQL 쿼리에서 SUM ()에서 계산 비율
SQL같은 SELECT SQL 쿼리에서 SUM ()에서 계산 비율
테이블 my_obj에서 두 개의 정수 필드가 있습니다 :
(value_a integer, value_b integer);
나는 얼마나 많은 시간 value_a = value_b 계산하려고, 나는 퍼센트에서이 비율을 표현하고 싶다. 이것은 내가 시도 코드입니다 :
select sum(case when o.value_a = o.value_b then 1 else 0 end) as nb_ok,
sum(case when o.value_a != o.value_b then 1 else 0 end) as nb_not_ok,
compute_percent(nb_ok,nb_not_ok)
from my_obj as o
group by o.property_name;
compute_percent 단순히 (a * 100) / (A + B의)이다 않는 stored_procedure
그러나 PostgreSQL은 열 nb_ok이 존재하지 않는다고 불평한다. 어떻게 제대로 그렇게 할 것인가?
우분투 12.04와 PostgreSQL을 9.1을 사용합니다.
해결법
-
==============================
1.이 보일 수보다이 질문에 대한 더 있습니다.
이 보일 수보다이 질문에 대한 더 있습니다.
이 훨씬 빠르고 간단합니다 :
SELECT property_name ,(count(value_a = value_b OR NULL) * 100) / count(*) AS pct FROM my_obj GROUP BY 1;
결과:
property_name | pct --------------+---- prop_1 | 17 prop_2 | 43
어떻게?
(소수 자리와 함께)를 사용하여 100.0 숫자로 계산을 강제함으로써, 소수점 이하를 유지한다. 이 ()로 라운드 사용할 수 있습니다 :
SELECT property_name ,round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct FROM my_obj GROUP BY 1;
결과:
property_name | pct --------------+------- prop_1 | 17.23 prop_2 | 43.09
여담으로: 내가 대신 valueA의 value_a를 사용합니다. PostgreSQL을에 인용 부호가 혼합 된 경우 식별자를 사용하지 마십시오. 나는이 어리 석음에서 오는 너무 많은 절망적 인 질문을 보았다. 당신은 내가에 대해 이야기하고 무엇을 궁금해하는 경우, 설명서의 장 식별자 및 핵심 단어를 읽어 보시기 바랍니다.
-
==============================
2.아마 가장 쉬운 방법은 절과 함께 사용하는 것입니다
아마 가장 쉬운 방법은 절과 함께 사용하는 것입니다
WITH data AS (SELECT Sum(CASE WHEN o.valuea = o.valueb THEN 1 ELSE 0 END) AS nbOk, Sum(CASE WHEN o.valuea != o.valueb THEN 1 ELSE 0 END) AS nbNotOk, FROM my_obj AS o GROUP BY o.property_name) SELECT nbok, nbnotok, Compute_percent(nbok, nbnotok) FROM data
-
==============================
3.또한이 버전을 시도 할 수 있습니다 :
또한이 버전을 시도 할 수 있습니다 :
WITH all(count) as (SELECT COUNT(*) FROM my_obj), matching(count) as (SELECT COUNT(*) FROM my_obj WHERE valueA = valueB) SELECT nbOk, nbNotOk, Compute_percent(nbOk, nbNotOk) FROM (SELECT matching.count as nbOk, all.count - matching.count as nbNotOk FROM all CROSS JOIN matching) data
from https://stackoverflow.com/questions/15644713/compute-percents-from-sum-in-the-same-select-sql-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 단일 매개 변수에 여러 값 전달 (0) | 2020.04.12 |
---|---|
[SQL] 주어진 문자열을 분할 및 사례 문을 준비 (0) | 2020.04.12 |
[SQL] SQL 서버 날짜 형식 기능 (0) | 2020.04.12 |
[SQL] 하나 개의 SQL 쿼리에서 두 테이블을 병합 및 날짜 값이 고유하게 (0) | 2020.04.12 |
[SQL] 배열 인수 여러 번에 집합을 반환하는 함수를 호출 (0) | 2020.04.12 |