2017-12-24 18 views
0

감안할 때 데이터베이스 스키마를 만들 것 , ACCOUNT_NUMBER) {아무 키도 여기에 언급되지 않았다} 고객 (CUSTOMER_NAME, customer_street, customer_city)카운트 (별개의 depositor.account_number)의 사용은 여기에 차이

에 대한 SQL 쿼리를 작성하는 데 필요한 질문 - 해리슨에 살고이어야 3 개 계정이 각 고객에 대한 평균 잔액을 찾기를 .

select depositor.customer_name,avg(balance) 
from depositor,account,customer 
where depositor.account_number=account.account_number and 
      depositor.customer_name=customer.customer_name and 
      customer_city='Harrison' 
group by depositor.customer_name 
having count(distinct depositor.account_number) >=3 

겠습니까이 결과의 변화에 ​​여기에 독특한 배치 될 :

select depositor.customer_name,avg(balance) 
from depositor,account,customer 
where depositor.account_number=account.account_number and 
      depositor.customer_name=customer.customer_name and 
      customer_city='Harrison' 
group by depositor.customer_name 
having count(depositor.account_number) >=3 

내 교과서 같이 쿼리의 언급 :

나는 다음과 같은 SQL 쿼리를 작성? 내 분석에 따르면, 그 결과 관계의 제품 간 (예금자 계정 고객) 여기에 값을 추가 할 것입니다 때문에 별개의 ACCOUNT_NUMBER CUSTOMER_NAME 등의 후보 키가됩니다.

+2

당신의 교과서가'FROM' 절에 콤마를 사용한다면, 나는 다른 교과서를 얻을 것입니다. –

+0

@GordonLinoff 내 사과하지만 그렇습니다. Silberschatz, Korth 및 Sudarshan의 데이터베이스 시스템 개념입니다. –

+0

쉼표는 전체 내부 조인을 의미하며, 내부 조인과 같은 방식으로 작동하게하려면 WHERE 조건을 사용해야합니다. – Vashi

답변

1

depositor 테이블에는 customer_nameaccount_number의 고유 한 조합이 저장되어있어 DISTINCT를 추가해도 큰 차이가 없어 보이지 않습니다.

그러나 테이블이 동일한 account_number의 인스턴스를 반복하는 사실 테이블 인 경우 동일한 계정 번호를 두 번 계산하지 않으려는 경우 차이가있을 수 있습니다.

하지만 다른 두 테이블에도 각 필드의 고유 한 조합이 포함되어있는 것처럼 보이기 때문에 차이가 없어야합니다.

+0

고맙습니다. 튜플의 복제본이 허용되었는지 "별개"가 차이를 만들었습니까? –

+0

예. 주어진 고객을 상대로 'account_number'에 대해 총 세 개의 항목이 '111', '333', '111'처럼 보인다고 상상해보십시오. 'COUNT() '를 사용하면 3 개의 계정을 사용할 수 있지만'COUNT (DISTINCT)'를 사용하면 2 개의 계정 만 사용하게됩니다.그래서'COUNT (DISTINCT) '를 사용하면 필터가 제거됩니다. 이것은'account_number'의 인스턴스를 반복 할 때입니다. – Vashi

+0

그러나 예금주 테이블에 중복 된 튜플을 허용 한 경우에만 해당되었을 것입니다. 관계형 테이블은 별개의 튜플을 가지는 것으로 가정하므로 여기서 차이를 만들어서는 안됩니다. –

0

depositor 테이블에 기본 키 제약 조건이 없으므로 이름 - 계정 쌍을 복제 할 수 있습니다. 귀하의 교과서는 복합 키를 논의하지 않았을 가능성이 있으므로이 시나리오를 잡는 방법으로 의도 된 것일 수 있습니다. 불행히도 세 개의 계정 자격이 올바르지 만 추가 행 (들)은 평균 계산을하지 않습니다.