2013-12-20 2 views
0
select distinct employee_id, first_name, commission_pct, department_id from 
employees; 

위의 쿼리를 사용하면 언급 된 모든 특성이 서로 구별됩니다. employee_id (직원의 기본 키)가 고유하므로 쿼리는 테이블의 모든 행을 생성합니다.특정 열에 DISTINCT 사용

commission_pct와 department_id의 고유 한 조합이있는 결과 집합이 필요합니다. 그래서 어떻게 쿼리가 형성되어야합니다. 나는 그것은 오류가 발생한다

select employee_id, first_name, distinct commission_pct, department_id from 
    employees; 

로 중간에 DISTINCT를 포함했을 때 결과는위원회의 독특한 조합을 가지고 department_id.The 테이블 인 쿼리를 형성하는 방법

ORA-00936-missing expression 

from HR 오라클 스키마.

+1

귀하의 requirment에 맞는 첫 번째 쿼리에서 반환되는 행을 예제를 통해 자세히 설명 할 수 있습니까? – rshetye

+0

당신은'commission and department_id'에 group by을 사용할 수 있습니다. 어떻게 그렇게하는지 파악할 수 없을 경우를 대비하여 주석으로 답하십시오. –

답변

2

를 사용합니다. 모든 직원 ID를 선택할 수는 없지만 고유 한 commission_pct W department_id 만 가질 수는 있습니다. ,

  • 모든 별개의 COMMISSION_PCT 만 department_id :

    그래서 당신이 보여주고 싶은이, 그것을 통해 생각?

  • 모든 commission_pct, department_id 및 관련 직원 수?
  • 모든 commission_pct, department_id 및 관련 직원을 쉼표로 구분합니까?
  • 모든 직원 (commission_pct 및 department_id가 이전 줄과 동일 할 때 null이 포함됩니까?

첫 번째 문제는 DISTINCT로 해결할 수 있습니다. 두 번째와 세 번째는 GROUP BY (더하기 count 또는 listagg)입니다. 마지막은 분석 함수 LAG로 해결됩니다.

1

당신은 전에 두 개의 열을 제거해야 별개의

실제로
select distinct commission_pct, department_id from 
employees; 

, 두 번째 쿼리가 작동 할 경우, 당신이 처음 두 열에 볼 것으로 예상합니까? 예를 들어 데이터가

| employee_id | first_name | commission_pct | department_id | 
|  1  |  "x" |  "b"  |  3  | 
|  2  |  "y" |  "b"  |  3  | 
|  1  |  "x" |  "c"  |  4  | 
|  2  |  "y" |  "c"  |  4  | 

당신은 두 행이

| employee_id | first_name | commission_pct | department_id | 
|  ?  |  ?  |  "b"  |  3  | 
|  ?  |  ?  |  "c"  |  4  | 

하지만 처음 두 컬럼에 어떤 기대 같은 결과를 얻을 것으로 예상 생각해?

0

시도해 볼 수 있습니까? 특정 행에주의를 해달라고 경우

SELECT 
    NAME1, 
    PH 
FROM 
     (WITH T 
      AS (SELECT 
        'mark' NAME1, 
        '1234567' PH 
       FROM 
        DUAL 
       UNION ALL 
       SELECT 
        'bailey', 
        '456789' 
       FROM 
        DUAL 
       UNION ALL 
       SELECT 
        'mark', 
        '987654' 
       FROM 
        DUAL) 
     SELECT 
      NAME1, 
      PH, 
      ROW_NUMBER () OVER (PARTITION BY NAME1 ORDER BY NAME1) SEQ 
     FROM 
      T) 
WHERE 
     SEQ = 1; 

후 집계 함수는 불가능 요청 무엇

SELECT 
     NAME1, 
     MAX (PH) PH 
FROM 
     T 
GROUP BY 
     NAME1;