복붙노트

[SQL] 비트 필드에 MIN 집계 함수를 적용

SQL

비트 필드에 MIN 집계 함수를 적용

나는 다음과 같은 쿼리를 작성하려면 :

SELECT   ..., MIN(SomeBitField), ...
FROM     ...
WHERE    ...
GROUP BY ...

나는 그것이 오류 피연산자 데이터 형식 비트 분 연산자에 대한 잘못된 반환하는 비트 필드의 최소 값을 계산하려고 할 때 문제는 SQL Server가 없습니다 그것 같이 수행한다.

나는 다음과 같은 해결 방법을 사용할 수 있습니다 :

SELECT   ..., CAST(MIN(CAST(SomeBitField AS INT)) AS BIT), ...
FROM     ...
WHERE    ...
GROUP BY ...

그러나, 뭔가 더 우아? (예를 들어, 거기에 내가 모르는, 집계 함수, 그리고 그 논리와 필드의 비트 값의 평가 있습니다.)

해결법

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

    1.BIT 만 두 가지 옵션이 있기 때문에, 단지 case 문을 사용합니다 :

    BIT 만 두 가지 옵션이 있기 때문에, 단지 case 문을 사용합니다 :

    SELECT CASE WHEN EXISTS (SELECT 1 FROM ....) THEN 1 ELSE 0 END AS 'MinBit'
    FROM ...
    WHERE ...
    

    이것은 장점이 있습니다 :

    그것은 쓰기에 좀 더 코드이지만 끔찍한 안된다. 당신은 당신이 항상 쿼리의 시작 부분에 CTE에서 (조인 모든 및 필터 기준) 당신의 큰 결과 집합을 캡슐화 할 수 확인하기 위해 여러 값을 가질 경우, CASE 문에서 해당 참조.

  2. ==============================

    2.하나의 옵션은 MIN (SomeBitField + 0)입니다. 그것은 (I 우아함으로 자격이) 적은 소음으로 잘 읽습니다.

    하나의 옵션은 MIN (SomeBitField + 0)입니다. 그것은 (I 우아함으로 자격이) 적은 소음으로 잘 읽습니다.

    말했다, 그것은 CASE 옵션보다 더 많은 해킹 틱입니다. 그리고 속도 / 효율성에 대해 아무것도 몰라.

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

    3.이 쿼리는 가장 좋은 솔루션입니다 :

    이 쿼리는 가장 좋은 솔루션입니다 :

    SELECT CASE WHEN MIN(BitField+0) = 1 THEN 'True' ELSE 'False' END AS MyColumn
     FROM MyTable
    

    당신이 비트 필드 + 0 추가하면 자동 INT처럼 될 것입니다

  4. ==============================

    4.

    select min(convert(int, somebitfield))
    

    또는 당신은 비트와 같은 결과를 유지하려는 경우

    select convert(bit, min(convert(int, somebitfield)))
    
  5. ==============================

    5.다음을 시도하십시오 참고 : 최소 대표와 집계 함수는 최대 진술하거나 집계 함수

    다음을 시도하십시오 참고 : 최소 대표와 집계 함수는 최대 진술하거나 집계 함수

    SELECT   ..., MIN(case when SomeBitField=1 then 1 else 0 end), MIN(SomeBitField+0)...
    FROM     ...
    WHERE    ...
    GROUP BY ...
    

    동일한 결과

  6. ==============================

    6.코드의이 작은 조각은 항상 마법처럼 저와 함께 일했다 :

    코드의이 작은 조각은 항상 마법처럼 저와 함께 일했다 :

    CONVERT(BIT, MIN(CONVERT(INT, BitField))) as BitField
    
  7. ==============================

    7.AVG (CAST () FLOAT AS 부울 열) OVER (...) 부울 AGGREGATE

    AVG (CAST () FLOAT AS 부울 열) OVER (...) 부울 AGGREGATE

    퍼지 부울 보내기

  8. from https://stackoverflow.com/questions/6997721/applying-the-min-aggregate-function-to-a-bit-field by cc-by-sa and MIT license