>

group by 의 행동은 무엇입니까 ?

2 개의 테이블이 있습니다 :

create table department
(
     dep_id int primary key,
     dep_id varchar(20),
     dep_location varchar(20)
)

그리고

create table employees_dep 
(
    emp_id int primary key,
    emp_name varchar(20),
    job_name varchar(20),
    manager_id int,
    hire_date date,
    salary decimal(10, 2),
    commision decimal(7, 2),
    dep_id int 
        foreign key references department(dep_id)
)

데이터 :

insert into department values (1001, 'finance', 'sydney')
insert into department values (2001, 'audit', 'melbourne')
insert into department values (3001, 'marketing', 'perth')
insert into department values (4001, 'production', 'brisbane')
insert into employees_dep 
values (68319, 'kayling', 'president', null, '11-18-1991', 6000, 0, 1001)
insert into employees_dep 
values (66928, 'blaze', 'manager', 68319, '05-01-1991', 2750, 0, 3001)
insert into employees_dep 
values (67832, 'clare', 'manager', 68319, '06-09-1991', 2550, 0, 1001)
insert into employees_dep 
values (65646, 'jonas', 'manager', 68319, '04-02-1991', 2957, 0, 2001)
insert into employees_dep 
values (67858, 'scarlet', 'analyst', 65646, '04-19-1991', 3100, 0, 2001)
insert into employees_dep  
values (69062, 'frank', 'analyst', 65646, '12-03-1991', 3100, 0, 2001)
insert into employees_dep 
values (63679, 'sandrine', 'clerk', 69062, '12-18-1991', 900, 0, 2001)
insert into employees_dep  
values (64989, 'adelyn', 'salesman', 66928, '02-20-1991', 1700, 400, 3001)
insert into employees_dep 
values (65271, 'wade', 'salesman', 66928, '02-22-1991', 1350, 600, 3001)
insert into employees_dep 
values (66564, 'madden', 'salesman', 66928, '09-28-1991', 1350, 1500, 3001)
insert into employees_dep 
values (68454, 'tucker', 'salesman', 66928, '09-08-1991', 1600, 0, 3001)
insert into employees_dep 
values (68736, 'andres', 'clerk', 67858, '05-23-1997', 1200, 0, 2001)
insert into employees_dep 
values (69000, 'julius', 'clerk', 66928, '12-03-1991', 1050, 0, 3001)
insert into employees_dep 
values (69324, 'marker', 'clerk', 67832, '01-23-1992', 1400, 0, 1001)

질문 : 다음과 같이 쿼리를 작성할 때 :

select  
    d.dep_name,
    count(d.dep_name) as no_of_employees 
from 
    employees_dep e, department d  
group by 
    d.dep_name

출력은 다음과 같습니다 :

  • no_of_employees가 모든 행에 14 인 모든 부서 이름

그룹 별 절이 하나의 데이터를 선택하고 그룹화하여 첫 번째 부서 이름을 선택한 다음 직원 테이블의 모든 행을 동일한 부서 ID로 그룹화 한 다음 행 수를 계산하지 않기 때문에 이것이 왜 그런가 각 그룹에서 검색어를 다음과 같이 쓸 때-

select  
    d.dep_name,
    count(d.dep_name) as no_of_employees 
from 
    employees_dep e, department d 
where 
    e.dep_id = d.dep_id  
group by 
    d.dep_name

그런 다음 표에서 각 부서의 정확한 발생 횟수와 함께 올바른 결과를 반환합니다.

그룹별로이 동작을 설명하십시오 ....

  • 답변 # 1

    내부 조인을 사용하십시오. 이 도움을 바랍니다

    d.dep_name을 선택하고         no_of_employees로 계산 (d.dep_name) 직원들로부터 _dep e e.dep_id = d.dep_id의 내부 조인 부서 d 그룹별로 d.dep_name

  • 답변 # 2

    암시 적 조인 구문을 사용하고 있으며 카테 시안 조인 (Cross Join)을 생성하여 2 개의 테이블의 모든 가능한 조합을 계산합니다. 따라서 14 개의 부서가 있으면 모든 직원이 14 개의 부서에있는 것처럼 보입니다. SQL에서 조인을 수행하고 명시 적 조인 구문을 사용하는 방법을 연구하면 도움이 될 것입니다. 이 경우 다른 사람도 지적했듯이 INNER JOIN이 문제를 해결하는 열쇠가 될 것입니다.

    SELECT
        d.dep_name
        ,count(emp_id) as no_of_employees
    FROM
        department d
        INNER JOIN employees_dep e
        ON e.dep_id = d.dep_id
    GROUP BY
        d.dep_name
    
    

  • 답변 # 3

    첫 번째 쿼리에서 결합 조건을 많이 사용합니다. 그렇지 않으면 교차 조인을 수행합니다. 적절한 결합 조건을 사용하면 올바른 출력을 얻을 수 있습니다.

    select  d.dep_name,count(1) as no_of_employees
    from employees_dep e join department d  
    On e.dep_id=d.dep_id
    group by d.dep_name
    
    

  • 이전 inflate exception - "클래스 androidsupportv4widgetDrawerLayout 팽창 오류"수정 방법
  • 다음 android - 앱의 "유형"을 변경할 수 있습니까? 예 - 바코드 스캐너를 기본 "카메라"앱으로 만들려면 어떻게해야합니까?