2016-11-30 1 views
0

전체 수입이 최소 수입보다 두 배 더 큰 모든 남성 고객을 표시해야하는 SQL 스크립트를 작성해야합니다.SQL 오류 : 작업이 있습니다

enter image description here

A는 같은 오류를 수신 :

-

SELECT 
    DISTINCT 
    customer_rk, 
    max(monthly_income_amt), 
    min(monthly_income_amt), 
    max(monthly_income_amt)/min(monthly_income_amt) AS income_ratio 
FROM asql.individual_customer 
WHERE middle_nm LIKE '%ВИЧ' 
GROUP BY customer_rk 
HAVING income_ratio > 2; 

middle_nm like '%ВИЧ'는 (러시아어의 requirments)

다음

테이블의 모습을 어떻게 자신의 중간 이름으로 사람을 분류입니다

ERROR: column "income_ratio" does not exist (line 6)

내가 뭘 잘못하고 있니?

+0

SELECT DISTINCT를 선택하는 이유는 무엇입니까? GROUP BY는 중복을 반환하지 않습니다. – jarlh

답변

2

income_ratio 대신에 max(monthly_income_amt)/min(monthly_income_amt)>2으로 쓰십시오.

또한 distinct은 그룹화 할 때 의미가 없습니다.

1

다음과 같이 having 절을 수정해야합니다.

SELECT 
     DISTINCT 
     customer_rk, 
     max(monthly_income_amt), 
     min(monthly_income_amt), 
     max(monthly_income_amt)/min(monthly_income_amt) AS income_ratio 
    FROM asql.individual_customer 
    WHERE middle_nm LIKE '%ВИЧ' 
    GROUP BY customer_rk 
    HAVING (max(monthly_income_amt)/min(monthly_income_amt)) > 2 
0

파생 테이블에서 쿼리를 래핑하십시오. 그런 다음 WHERE 절에 income_ratio를 넣을 수 있습니다.

select * from 
(
    SELECT 
     customer_rk, 
     max(monthly_income_amt), 
     min(monthly_income_amt), 
     max(monthly_income_amt)/min(monthly_income_amt) AS income_ratio 
    FROM asql.individual_customer 
    WHERE middle_nm LIKE '%ВИЧ' 
    GROUP BY customer_rk 
) dt 
where income__ratio > 2; 
관련 문제