2010-06-17 5 views
0

테이블의 레코드 집합에 대해 비교적 간단한 연산을 수행하기 위해 SQL을 계산하려고하는데 막혔습니다. 항목 당 여러 행이있는 테이블을 고려하십시오. 모두 공통 키로 식별됩니다. 예를 들어(My) SQL에서 행 집합으로 작업하고 값을 비교하십시오.

:

serial model color 
XX1 A  blue 
XX2 A  blue 
XX3 A  green 
XX5 B  red 
XX6 B  blue 
XX1 B  blue 

내가 예를 들어 수행 할 것입니다 것은 :

  1. 모든 모델 A는 행이 동일한 색으로 해달라고 행을 찾아야한다고 가정. (예 : XX3은 녹색 임). 소정의 일련 번호, 모델 단일 유형에만 지점이이

(예를 들어, XX1 A와 점 양자와 B의 경우)가 발생하지 않는 열을 알 수 있다고 가정

  • 모든 간단한 논리적 인 것들. 이를 추상화하기 위해 단일 키 (또는 키 조합)를 사용하여 항목을 그룹화 한 다음 해당 레코드의 값을 비교하는 방법을 알고 싶습니다.

    동일한 테이블에서 조인을 사용해야합니까? 어떤 종류의 배열이나 비슷한 것을 사용해야합니까? 당신의 도움이

  • 답변

    0

    에 대한

    덕분에 나는 (당신이 그것을 넣어 같이가, 같은 테이블에 조인)을 자체 조인 사용합니다, # 1를 해결하기 위해. 예를 들어

    ,

    select * 
    from mytable 
    where serial in (select serial 
           from mytable 
           group by model, color 
           having count(*) = 1) 
    

    는 하나의 색에 존재하는 모든 일련 번호를 찾을 것입니다. 나는 이것을 시험하지 않았지만 그것이 무엇을하는지 보길 바랍니다. 내부 선택은 한 번만 발생하는 모든 레코드를 찾은 다음 외부 선택은 해당 연재의 모든 세부 정보를 표시합니다.

    당연히 말하자면, 이것은 불량한 테이블 디자인입니다. 그러나 나는 그것이 당신의 질문이라고 생각하지 않습니다. 그리고 이것이 이것이 실제 상황에 대한 예시라고 생각합니다. 내 관심사는 단일 발생이 실제로 나쁜 것으로 가정 할 이유가 없다는 것입니다. 10 개의 레코드가 있고 모두 모두 고유 한 색을 가질 수 있습니다. 이 접근법은 모든 것이 틀렸다고 말했고 어떤 것이 맞는지 결정할 수 없었습니다. 경우 1

    3

    이 당신에게 각 모델의 목록 카운트와 함께 그 모델에 대한 각 색상을 줄 것이다

    SELECT model, color, COUNT(*) AS num FROM yourTable GROUP BY model, color; 
    

    . 그래서 데이터 세트의 출력은 다음과 같습니다이 출력에서 ​​

    model color num 
    A  blue 2 
    A  green 1 
    B  red 1 
    B  blue 2 
    

    당신은 쉽게 잘못된 무엇이 있는지와 UPDATE 문을 사용하여 수정하거나 각 모델에 가장 인기있는 색상을 지정 담요 작업을 할 수 있습니다. 2의

    :

    SELECT serial, COUNT(*) AS num FROM yourTable GROUP BY serial HAVING num > 1 
    

    이위한 출력 될 것이다 :

    serial num 
    XX1 2 
    
    관련 문제