홈>
emp_id와 month_of_project라는 두 개의 열이있는 직원 테이블이 있습니다. 특정 달에 프로젝트에 참여한 직원 수를 확인하고 싶습니다. 같은 사람이 3 개월에 참여한 경우 첫 달 동안 만 그 사람을 계산합니다. 아래에 샘플을 언급했습니다
emp_id month_of_project
101 Jan
102 Jan
103 Jan
101 Feb
104 Mar
102 Mar
105 Apr
103 Apr
결과는
month count
Jan 3
Feb 0
Mar 1
Apr 1
SQL에서 이것을 달성 할 수있는 방법이 있습니까?
- 답변 # 1
- 답변 # 2
NOT EXISTS
를 사용할 수 있습니다 이전 달에 레코드가없는 레코드 만 가져옵니다. 숫자가 아니라 해당 월의 텍스트 표현을 선택하는 것이 너무 나쁩니다. 따라서 먼저 숫자로 변환해야합니다. 당신은CASE
를 사용할 수 있습니다 여기에 표현하십시오.SELECT t1.month_of_project, count(*) FROM elbat t1 WHERE NOT EXISTS (SELECT * FROM elbat t2 WHERE CASE t2.month_of_project WHEN 'Jan' THEN 1 ... WHEN 'Dec' THEN 12 END < CASE t1.month_of_project WHEN 'Jan' THEN 1 ... WHEN 'Dec' THEN 12 END AND t2.emp_id = t1.emp_id) GROUP BY t1.month_of_project;
- 답변 # 3
SQL은 오라클 용입니다. 그리고 실제 시스템에 이와 같은 달을 저장하지 마십시오. 날짜 필드를 사용하십시오. 사용 사례가 월인 경우 연도는 2000과 같이 임의 일 수 있으며 일은 01 일 수 있지만 정렬 등을 위해 대기 시간이 항상 항상 올바른 아이디어입니다.
먼저 데이터를 시뮬레이션하는 것입니다. with part mons의 두 번째는 2 월에 0을 원하기 때문에 가능한 월 목록을 얻는 것입니다. 외부에 테이블이 있으면 필요하지 않습니다.
기본적으로 내부 쿼리는 직원의 첫 달을 사용할 월로 찾고 외부 쿼리는 구별합니다
with emp_mon as ( select '101' emp_id, to_date('20190101','YYYYMMDD') month_of_project from dual union all select '102', to_date('20190101','YYYYMMDD') from dual union all select '103', to_date('20190101','YYYYMMDD') from dual union all select '101', to_date('20190201','YYYYMMDD') from dual union all select '104', to_date('20190301','YYYYMMDD') from dual union all select '102', to_date('20190301','YYYYMMDD') from dual union all select '105', to_date('20190401','YYYYMMDD') from dual union all select '103', to_date('20190401','YYYYMMDD') from dual ), mons as ( select distinct month_of_project from emp_mon ) select mons.month_of_project, count(distinct emp_first_mon.emp_id) cnt_emp_id from mons left outer join ( select emp_id, min(month_of_project) month_of_project from emp_mon group by emp_id ) emp_first_mon on emp_first_mon.month_of_project = mons.month_of_project group by mons.month_of_project order by 1
- 답변 # 4
SQL Server COUNT DISTINCT는 정확히 원하는 작업을 수행합니다. 그러나 올바른 열을 기준으로 그룹화하는 것이 중요합니다.
WITH TEMP AS ( SELECT 1 AS EMP, 1 AS MONTH_D UNION ALL SELECT 2 AS EMP, 1 AS MONTH_D UNION ALL SELECT 2 AS EMP, 1 AS MONTH_D UNION ALL SELECT 3 AS EMP, 1 AS MONTH_D UNION ALL SELECT 1 AS EMP, 2 AS MONTH_D ) SELECT MONTH_D, COUNT(DISTINCT EMP) FROM TEMP GROUP BY MONTH_D
관련 자료
- mysql - 각 행의 다른 열 값을 기반으로 한 열에 값을 삽입하는 방법은 무엇입니까?
- python - 다른 pandas 열에 대한 필터링을 기반으로 pandas 열에 대한 모드 찾기
- python - 다른 항목을 기반으로 열 작성
- python 3.x - 한 달의 특정 날짜를 사용하여 다른 열의 총 개수를 얻으시겠습니까?
- python - 다른 열 Pyspark의 조건을 기반으로 CountDistinct
- python - 열에 다른 열에 특정 값이있는 경우 계산
- r - 동일한 데이터 프레임의 다른 열을 기반으로 한 열을 Barplot
- 시계열을 만들기 위해 열 이름을 기반으로 R 데이터 프레임에 열을 만듭니다
- r - 목록 또는 벡터를 기반으로 다른 텍스트에서 추출한 텍스트를 포함하는 데이터 프레임에 새 열을 만듭니다
- mysql - SELECT 필드에서 구별, 개수 및 합계를 동시에 사용하는 방법은 무엇입니까?
- r - tidyverse로 특정 조건에 따라 새 열을 추가하는 방법은 무엇입니까?
- tidyverse - R에서 열에서 다른 열로 한 범주를 얻는 방법은 무엇입니까?
- excel - 다른 시트의 조회 값을 기반으로 한 열의 값을 집계하려면 어떻게해야합니까?
- mysql - 오류 # 1055 또 다른 하나는 GROUP BY의 열에 기능적으로 종속되지 않는 집계되지 않은 열을 포함합니다
- python - 팬더의 다른 열 값을 기반으로 반환 값을 반환하는 방법은 무엇입니까?
- r - 명명 된 벡터를 기반으로 열 값 대체
- python - 정렬 된 데이터 프레임의 ID 당 열에서 서로 다른 값의 수/고유
- python - 다른 데이터 프레임 값을 기준으로 팬더 값 정렬
- r - 다른 문자 열의 그룹을 기반으로 벡터 값을 사용하여 새 열 만들기
- eloquent - laravel의 Auth 사용자를 기반으로 다른 테이블의 데이터를 어떻게 표시합니까?
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
GROUP BY 절만 사용해야한다고 생각합니다