[SQL] 필드에 조건부 카운트
SQL필드에 조건부 카운트
나는이 같은 테이블을 가지고 있다면 :
jobId, jobName, Priority
이로써 우선 순위는 1 ~ 5 사이의 정수가 될 수 있습니다.
나는이 보고서의 차트를 생성하는이 쿼리를해야하기 때문에, 나는 작업 ID, 작업 이름 및 Priority1, Priority2, Priority3, Priority4라는 5 개 필드를 표시해야합니다. Priority5.
Priority1 우선 순위 필드는 1의 값을 갖는 행의 량을 계산한다.
Priority2 우선 순위 필드의 값이 2 행의 량을 계산한다.
Priority3 우선 순위 필드 (3)의 값을 갖는 행의 량을 계산한다.
기타
어떻게 그 빠르고 성능이 좋은 방법으로 할 것인가?
많은 감사, KAVE
해결법
-
==============================
1.난 당신이 후 것 같아요
난 당신이 후 것 같아요
select jobID, JobName, sum(case when Priority = 1 then 1 else 0 end) as priority1, sum(case when Priority = 2 then 1 else 0 end) as priority2, sum(case when Priority = 3 then 1 else 0 end) as priority3, sum(case when Priority = 4 then 1 else 0 end) as priority4, sum(case when Priority = 5 then 1 else 0 end) as priority5 from Jobs group by jobID, JobName
그러나 나는, 그래서 그들을 제거하고하여 그룹을 제거 할 경우 결과에에서는 jobID 및 작업 이름을 필요로하는 경우 확실 해요
-
==============================
2.ELSE 문에 대한 요구 사항은 대신 SUM의 COUNT를 제거합니다 사용 :
ELSE 문에 대한 요구 사항은 대신 SUM의 COUNT를 제거합니다 사용 :
SELECT jobId, jobName, COUNT(CASE WHEN Priority=1 THEN 1 END) AS Priority1, COUNT(CASE WHEN Priority=2 THEN 1 END) AS Priority2, COUNT(CASE WHEN Priority=3 THEN 1 END) AS Priority3, COUNT(CASE WHEN Priority=4 THEN 1 END) AS Priority4, COUNT(CASE WHEN Priority=5 THEN 1 END) AS Priority5 FROM TableName GROUP BY jobId, jobName
-
==============================
3.IIF는 표준 SQL 구문 아니지만, 그것은 당신의 데이터베이스에 의해 지원되는 경우에는, 당신은 동일한 결과를 생성하는 더 우아한 문을 달성 할 수있다 :
IIF는 표준 SQL 구문 아니지만, 그것은 당신의 데이터베이스에 의해 지원되는 경우에는, 당신은 동일한 결과를 생성하는 더 우아한 문을 달성 할 수있다 :
SELECT JobId, JobName, COUNT(IIF (Priority=1, 1, NULL)) AS Priority1, COUNT(IIF (Priority=2, 1, NULL)) AS Priority2, COUNT(IIF (Priority=3, 1, NULL)) AS Priority3, COUNT(IIF (Priority=4, 1, NULL)) AS Priority4, COUNT(IIF (Priority=5, 1, NULL)) AS Priority5 FROM TableName GROUP BY JobId, JobName
-
==============================
4.ANSI SQL-92 CASE 문을 사용하여, 당신은이 (파생 테이블 플러스의 경우)와 같은 뭔가를 할 수 :
ANSI SQL-92 CASE 문을 사용하여, 당신은이 (파생 테이블 플러스의 경우)와 같은 뭔가를 할 수 :
SELECT jobId, jobName, SUM(Priority1) AS Priority1, SUM(Priority2) AS Priority2, SUM(Priority3) AS Priority3, SUM(Priority4) AS Priority4, SUM(Priority5) AS Priority5 FROM ( SELECT jobId, jobName, CASE WHEN Priority = 1 THEN 1 ELSE 0 END AS Priority1, CASE WHEN Priority = 2 THEN 1 ELSE 0 END AS Priority2, CASE WHEN Priority = 3 THEN 1 ELSE 0 END AS Priority3, CASE WHEN Priority = 4 THEN 1 ELSE 0 END AS Priority4, CASE WHEN Priority = 5 THEN 1 ELSE 0 END AS Priority5 FROM TableName )
-
==============================
5.
SELECT Priority, COALESCE(cnt, 0) FROM ( SELECT 1 AS Priority UNION ALL SELECT 2 AS Priority UNION ALL SELECT 3 AS Priority UNION ALL SELECT 4 AS Priority UNION ALL SELECT 5 AS Priority ) p LEFT JOIN ( SELECT Priority, COUNT(*) AS cnt FROM jobs GROUP BY Priority ) j ON j.Priority = p.Priority
-
==============================
6.당신은 자신에 대해 테이블을 조인 수 :
당신은 자신에 대해 테이블을 조인 수 :
select t.jobId, t.jobName, count(p1.jobId) as Priority1, count(p2.jobId) as Priority2, count(p3.jobId) as Priority3, count(p4.jobId) as Priority4, count(p5.jobId) as Priority5 from theTable t left join theTable p1 on p1.jobId = t.jobId and p1.jobName = t.jobName and p1.Priority = 1 left join theTable p2 on p2.jobId = t.jobId and p2.jobName = t.jobName and p2.Priority = 2 left join theTable p3 on p3.jobId = t.jobId and p3.jobName = t.jobName and p3.Priority = 3 left join theTable p4 on p4.jobId = t.jobId and p4.jobName = t.jobName and p4.Priority = 4 left join theTable p5 on p5.jobId = t.jobId and p5.jobName = t.jobName and p5.Priority = 5 group by t.jobId, t.jobName
또는 당신은 합계 내부 케이스를 사용할 수 있습니다 :
select jobId, jobName, sum(case Priority when 1 then 1 else 0 end) as Priority1, sum(case Priority when 2 then 1 else 0 end) as Priority2, sum(case Priority when 3 then 1 else 0 end) as Priority3, sum(case Priority when 4 then 1 else 0 end) as Priority4, sum(case Priority when 5 then 1 else 0 end) as Priority5 from theTable group by jobId, jobName
-
==============================
7.쿼리 디자인 뭔가 잘못. 당신은뿐만 아니라 각 행에서 특정 작업을 보여주는하고있어 당신도 혹시 행 (즉, 작업의 우선 순위) '1'과 '0'하나의 우선 순위 열 4 개의 우선 순위 열이 상황을해야하므로 또는 당신은 모든 행의 모든 우선 순위의 수를 반복하게 될 겁니다.
쿼리 디자인 뭔가 잘못. 당신은뿐만 아니라 각 행에서 특정 작업을 보여주는하고있어 당신도 혹시 행 (즉, 작업의 우선 순위) '1'과 '0'하나의 우선 순위 열 4 개의 우선 순위 열이 상황을해야하므로 또는 당신은 모든 행의 모든 우선 순위의 수를 반복하게 될 겁니다.
당신은 정말 여기에 표시 할 수 있습니까?
-
==============================
8.이 시도:
이 시도:
SELECT Count(Student_ID) as 'StudentCount' FROM CourseSemOne where Student_ID=3 Having Count(Student_ID) < 6 and Count(Student_ID) > 0;
from https://stackoverflow.com/questions/1288058/conditional-count-on-a-field by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 이메일에 대한 HTML 테이블에 SQL 쿼리 결과 테이블로 변환 (0) | 2020.04.24 |
---|---|
[SQL] 제약 조건 이름의 목적은 무엇인가 (0) | 2020.04.24 |
[SQL] 그것은 엔티티 프레임 워크와 네이티브 SQL을 실행할 수 있습니까? (0) | 2020.04.24 |
[SQL] SQL 서버 자동으로 자릅니다의 VARCHAR는 저장 프로 시저의 (0) | 2020.04.24 |
[SQL] SQL 쿼리 실행 엔티티 프레임 워크에서 익명 유형 결과 (0) | 2020.04.24 |