[SQL] COUNTIF 집계 함수의 SQL 서버에 해당
SQLCOUNTIF 집계 함수의 SQL 서버에 해당
난 단지 특정 조건에 따라 기록을 계산하는 능력을 필요로 GROUP BY 절에 쿼리를 짓고 있어요 (특정 컬럼 값이 1에 동일이다, 예를 들어 레코드 만 계산).
SELECT UID,
COUNT(UID) AS TotalRecords,
SUM(ContractDollars) AS ContractDollars,
(COUNTIF(MyColumn, 1) / COUNT(UID) * 100) -- Get the average of all records that are 1
FROM dbo.AD_CurrentView
GROUP BY UID
HAVING SUM(ContractDollars) >= 500000
이 COUNTIF라는 네이티브 SQL 기능이 없지만, 여기에 생각이 MyColumn의 값 '1'이 모든 행의 비율을 결정하는 것입니다 때문에 COUNTIF () 라인은 분명히 실패합니다.
제대로 MS SQL 2005 환경에서이를 구현하는 방법에 대한 어떤 생각?
해결법
-
==============================
1.당신은 (! COUNT되지 않음)과 같은 CASE 문 결합 된 SUM을 사용할 수 있습니다 :
당신은 (! COUNT되지 않음)과 같은 CASE 문 결합 된 SUM을 사용할 수 있습니다 :
SELECT SUM(CASE WHEN myColumn=1 THEN 1 ELSE 0 END) FROM AD_CurrentView
참고 :이 환경에 의존 할 수 있지만 내 자신의 테스트 NULL을에서이 문제가 아니었다. 당신은 같은 널 (null)을 처리 할 수 :
SELECT SUM(CASE WHEN ISNULL(myColumn,0)=1 THEN 1 ELSE 0 END) FROM AD_CurrentView
-
==============================
2.나는 보통 조쉬 권장하지만, 브레인 스토밍과 내가 공유처럼 느꼈다 약간 날조 한 대안을 테스트 무엇.
나는 보통 조쉬 권장하지만, 브레인 스토밍과 내가 공유처럼 느꼈다 약간 날조 한 대안을 테스트 무엇.
당신은 COUNT (의 ColumnName가) 널 (null)을 계산하고,이 같은 사용 무언가하지 않는다는 사실을 이용할 수 있습니다 :
SELECT COUNT(NULLIF(0, myColumn)) FROM AD_CurrentView
NULLIF는 - 값 전달 된 두가 같은 경우 NULL을 반환합니다.
장점 : 표현하여 대신 SUM () 표기법을 갖는 행을 계산하는 의도. 단점 : 명확로가 작동하지 않음 방법 ( "마법"보통 나쁜).
-
==============================
3.나는이 구문을 사용합니다. 그것은 조쉬와 크리스의 제안과 동일 달성하지만, 장점으로는 ANSI의 규격 및 특정 데이터베이스 공급 업체에 연결되지 않습니다.
나는이 구문을 사용합니다. 그것은 조쉬와 크리스의 제안과 동일 달성하지만, 장점으로는 ANSI의 규격 및 특정 데이터베이스 공급 업체에 연결되지 않습니다.
select count(case when myColumn = 1 then 1 else null end) from AD_CurrentView
-
==============================
4.조쉬의 대답에 추가
조쉬의 대답에 추가
SELECT COUNT(CASE WHEN myColumn=1 THEN AD_CurrentView.PrimaryKeyColumn ELSE NULL END) FROM AD_CurrentView
변경하지 않고 (SQL 서버 2012 년) 잘 나를 위해 일한 '개수'에 '합'과 같은 논리는 다른 '조건부 집계'에 이식입니다. 예컨대, 조건에 따라 합산 :
SELECT SUM(CASE WHEN myColumn=1 THEN AD_CurrentView.NumberColumn ELSE 0 END) FROM AD_CurrentView
-
==============================
5.방법에 대한
방법에 대한
SELECT id, COUNT(IF status=42 THEN 1 ENDIF) AS cnt FROM table GROUP BY table
CASE보다 짧은 :)
COUNT 때문에 작품 () 널 (null) 값을 계산하고, IF / CASE의 경우는 null 조건이 충족되지 않을 때 더 ELSE 존재하지 않습니다.
나는 () SUM을 사용하는 것보다 더 나은 것 같아요.
-
==============================
6.아니 제품 별하지만, SQL 표준 제공
아니 제품 별하지만, SQL 표준 제공
SELECT COUNT () FILTER WHERE <조건 1> COUNT () FILTER WHERE <조건 2>, ... FROM ...
이 목적을 위해. 또는 밀접하게 유사 뭔가 것을, 내 모자의 상단을 모른다.
물론 업체들은 독점 솔루션 스틱을 선호합니다.
-
==============================
7.왜 이런?
왜 이런?
SELECT count(1) FROM AD_CurrentView WHERE myColumn=1
-
==============================
8.내 SELECT 컬럼의 일환으로 각 항목 내 결과에 표시된 횟수의 모방 %가 내 경우에는 () COUNTIF를 사용했다.
내 SELECT 컬럼의 일환으로 각 항목 내 결과에 표시된 횟수의 모방 %가 내 경우에는 () COUNTIF를 사용했다.
그래서 나는 이것을 사용 ...
SELECT COL1, COL2, ... ETC (1 / SELECT a.vcount FROM (SELECT vm2.visit_id, count(*) AS vcount FROM dbo.visitmanifests AS vm2 WHERE vm2.inactive = 0 AND vm2.visit_id = vm.Visit_ID GROUP BY vm2.visit_id) AS a)) AS [No of Visits], COL xyz FROM etc etc
물론 당신은 당신의 디스플레이 요구 사항에 따라 결과를 포맷해야합니다.
-
==============================
9.
SELECT COALESCE(IF(myColumn = 1,COUNT(DISTINCT NumberColumn),NULL),0) column1, COALESCE(CASE WHEN myColumn = 1 THEN COUNT(DISTINCT NumberColumn) ELSE NULL END,0) AS column2 FROM AD_CurrentView
from https://stackoverflow.com/questions/582637/sql-server-equivalent-of-a-countif-aggregate-function by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQLite는에 변수를 선언하고 사용 (0) | 2020.03.29 |
---|---|
[SQL] SQL 서버 : 적절한 케이스 / 타이틀 케이스에 모든 UPPER 사례를 확인 (0) | 2020.03.29 |
[SQL] 어떻게 엑셀 테이블에 SQL 쿼리를 실행하려면? (0) | 2020.03.29 |
[SQL] SQL 호출은 커서를 사용하지 않고 각 행에 대해 저장 프로 시저 (0) | 2020.03.29 |
[SQL] 가장 빠른 방법은 매우 큰 테이블의 행의 정확한 수를 계산하려면? (0) | 2020.03.29 |