부울 열을 집계하는 방법
어떻게 이런 튜플을 모을 수 있을까요?
COL_1 | COL_2 | COL_3 | COL_4
val | T | F | F
val | F | T | F
OR 기능을 사용하여 다음 표를 반환하시겠습니까?
COL_1 | COL_2 | COL_3 | COL_4
val | T | T | F
간단하게,GROUP BY,사용하다MAX()사용 가능한 경우 T를 반환하고 그렇지 않으면 F를 반환합니다.
select col_1, max(col_2), max(col_3), max(col_4)
from tablename
group by col_1
참고로 (Oracle에서는 동작하지 않습니다)포스트그레SQL은 다음과 같은 작업을 수행합니다.
SELECT col_1, bool_or(col_2), bool_or(col_3), bool_or(col_4)
FROM tablename GROUP BY col_1 ORDER BY col_1
한다면COL_2로.COL_4are text columns (텍스트열)char,varchar,varchar2,nvarchar,nvarchar2포함)'T'또는'F', 그럼, 당신은 그냥 그것을 가져가면 됩니다.MAX그 중에서도'T' > 'F',예.'T'다음에 오다'F'사전순으로
SELECT COL_1, MAX(COL_2) AS COL_2, MAX(COL_3) AS COL_3, MAX(COL_4) AS COL_4
FROM table
GROUP BY COL_1
설명:적어도 1개의 오퍼랜드가 TRUE인 경우 로케이션 연산 OR은 TRUE를 반환합니다.MAX()는 TRUE를 반환합니다."T"적어도 하나의 값이"T"기타"F".
주의: Boolean 컬럼이 다음과 같이 선언된 경우
COL_x NUMBER(1) DEFAULT 0 NOT NULL
또는 다른 숫자 유형을 선택할 수 있습니다.MAX(ABS(col_x))음의 값도 TRUE로 카운트되기 때문에 (ComboBox가 부울에 연결되어 있는 액세스프런트 엔드가 있는 경우 값이 생성됩니다.0또는-1.)
SELECT col1 = MAX(CONVERT(tinyint, ISNULL(col1,0))) ...
설명: (S)처음 col1의 부울값을 취득하고, null의 경우는 false를 취득합니다.이는 BIT 대신 TINYINT 데이터 유형으로 변환됩니다.그러면 GROUP BY에서 "true가 있으면 true를 반환한다"고 효과적으로 말하는 MAX() 집약 함수를 사용할 수 있습니다.
이것을 시도해 보는 것을 추천합니다.
declare @tempTable table(bitval bit)
insert into @tempTable values(1)
insert into @tempTable values(1)
insert into @tempTable values(0)
insert into @tempTable values(1)
select min(cast(bitval as int)) as AndAggregate from @tempTable
select max(cast(bitval as int)) as ORAggregate from @tempTable
Amazon Redshift의 경우bool_or기능은 기능합니다.
WITH b AS (
SELECT FALSE AS a
UNION ALL
SELECT TRUE
UNION ALL
SELECT FALSE
)
SELECT bool_or(a)
FROM b;
-- TRUE
WITH b AS (
SELECT FALSE AS a
UNION ALL
SELECT FALSE
UNION ALL
SELECT FALSE
)
SELECT bool_or(a)
FROM b;
-- FALSE
https://docs.aws.amazon.com/redshift/latest/dg/r_BOOL_OR.html
SQL 기본 사용
SELECT tt.COL_1,
CASE when tt.COL_2==1 then T else F end AS COL_2,
CASE when tt.COL_3==1 then T else F end AS COL_3,
CASE when tt.COL_4==1 then T else F end AS COL_4,
FROM
(SELECT COL_1,
MAX( case when COL_2==T then 1 else 0 end) as COL_2,
MAX( case when COL_3==T then 1 else 0 end) as COL_3,
MAX( case when COL_4==T then 1 else 0 end) as COL_4
FROM table GROUP BY COL_1 )as tt
언급URL : https://stackoverflow.com/questions/37947668/how-to-aggregate-boolean-column
'programing' 카테고리의 다른 글
| Oracle에서 문자열 연결 연산자는 무엇입니까? (0) | 2023.03.26 |
|---|---|
| 이미지 자산을 퍼블릭에 저장합니까, 아니면 reactJ에 저장합니까? (0) | 2023.03.26 |
| C#의 JSON 어레이 시리얼 해제 (0) | 2023.03.26 |
| 타이프 스크립트의 소품으로 useState 전달 (0) | 2023.03.26 |
| 유형 스크립트로 반응에서 참조를 사용하는 방법 (0) | 2023.03.26 |