BIT 필드에 MIN 집계 함수 적용
다음 쿼리를 작성하고 싶습니다.
SELECT ..., MIN(SomeBitField), ...
FROM ...
WHERE ...
GROUP BY ...
문제는 SQL Server가 비트 필드의 최소값을 계산하려고 할 때 오류를 반환하는 것을 좋아하지 않는다는 것Operand data type bit is invalid for min operator
입니다.
다음 해결 방법을 사용할 수 있습니다.
SELECT ..., CAST(MIN(CAST(SomeBitField AS INT)) AS BIT), ...
FROM ...
WHERE ...
GROUP BY ...
그러나 더 우아한 것이 있습니까? (예를 들어, 내가 모르는, and
필드의 비트 값 의 논리를 평가하는 집계 함수가있을 수 있습니다 .)
에는 두 가지 옵션 BIT
만 있으므로 case 문을 사용하십시오.
SELECT CASE WHEN EXISTS (SELECT 1 FROM ....) THEN 1 ELSE 0 END AS 'MinBit'
FROM ...
WHERE ...
다음과 같은 이점이 있습니다.
- 테이블 스캔을 강요하지 않음 (
BIT
필드의 인덱스는 거의 사용되지 않음) - 단락 TWICE (에 대해 한 번
EXISTS
반복CASE
)
작성해야 할 코드가 조금 더 많지만 끔찍하지는 않습니다. 확인할 값이 여러 개인 경우 쿼리 시작 부분에 더 큰 결과 집합 ( JOIN
및 FILTER
기준 포함)을 항상 캡슐화 CTE
한 다음 CASE
문 에서 참조 할 수 있습니다.
한 가지 옵션은 MIN(SomeBitField+0)
입니다. 소음이 적고 잘 읽혀집니다 (우아함으로 인정됩니다).
즉, CASE
옵션 보다 해킹에 가깝습니다 . 그리고 나는 속도 / 효율성에 대해 아무것도 모릅니다.
이 쿼리가 최상의 솔루션입니다.
SELECT CASE WHEN MIN(BitField+0) = 1 THEN 'True' ELSE 'False' END AS MyColumn
FROM MyTable
BitField + 0을 추가하면 자동으로 int처럼됩니다.
다음을 시도해보십시오 : 최소 표현 및 집계 함수, 최대 표현 또는 집계 함수
SELECT ..., MIN(case when SomeBitField=1 then 1 else 0 end), MIN(SomeBitField+0)...
FROM ...
WHERE ...
GROUP BY ...
같은 결과
select min(convert(int, somebitfield))
또는 결과를 비트로 유지하려면
select convert(bit, min(convert(int, somebitfield)))
이 작은 코드는 항상 저와 함께 매력적으로 작용했습니다.
CONVERT(BIT, MIN(CONVERT(INT, BitField))) as BitField
AVG (CAST (boolean_column AS FLOAT)) OVER (...) AS BOOLEAN_AGGREGATE
퍼지 부울을 지정하십시오.
1은 모두 참임을 나타냅니다.
0은 모두 거짓임을 나타냅니다.
] 0..1 [사이의 값은 부분 일치를 나타내며 일정 비율의 진실 일 수 있습니다.
참고 URL : https://stackoverflow.com/questions/6997721/applying-the-min-aggregate-function-to-a-bit-field
'programing tip' 카테고리의 다른 글
HTML5-대용량 .mp4 파일을 스트리밍하는 방법은 무엇입니까? (0) | 2020.10.24 |
---|---|
개체 목록에서 속성 목록 가져 오기 (0) | 2020.10.24 |
부트 스트랩의 7 개의 동일한 열 (0) | 2020.10.23 |
JPA로 예약어 이름으로 필드 만들기 (0) | 2020.10.23 |
Python에서 []없이 목록 이해 (0) | 2020.10.23 |