2017-12-17 1 views
0

나는이 두 테이블 lokasi alamat_penerima 및 이 테이블

alamat의 penerima 테이블 [이 내 기록이다 enter image description here

다음

로카시 테이블 [이것은 레코드입니다(210)

은 내가 당신이 나에게

을 도울 수 있기를 바랍니다 두 개의 테이블이 [보기]처럼

enter image description here

을 만들기 위해 늘 내가 가지고 그냥이 조회 명령 시도 :

  SELECT COUNT(alamat_penerima.`nama_penerima`) AS penerima, lokasi.`wilayah` 
     FROM lokasi 
     INNER JOIN alamat_penerima ON alamat_penerima.`kota_kab` = lokasi.`wilayah` 
     GROUP BY alamat_penerima.`kota_kab` 

하지만 결과는

입니다.

result

+3

이미지 사용을 금하십시오. 텍스트를 복사하여 문제를 해결할 수 있도록 붙여 넣으십시오. 시간을 들여 테이블을 설명하고 그들과 예상 결과 사이의 "연관성"을 설명하십시오.작동하지 않는 모든 SQL을 제공하십시오. DDL을 가지고 있다면 질문에 복사하십시오. –

+0

포인터처럼 : INNER JOIN을 사용하여 테이블을 조인하고'GROUP BY'를'COUNT (...) '와 함께 사용하여 집계 된 수를 열별로 그룹화하십시오. –

+0

Welcome To Stack Overflow. 이것을 읽으십시오. http://meta.stackoverflow.com/a/271056/ 좋은 질문을 작성하는 작업은 종종 문제를 해결할 수있을 정도로 문제를 명확히하는 데 도움이 될 수 있습니다. –

답변

1

귀하의 질문은 이해하기 쉽지 않으므로이 대답은 추측입니다. 각 지역의 수신자 주소 수를 나열하고 주소가없는 지역도 표시 할 수 있기를 바랍니다.

이렇게하려면 두 개의 하위 쿼리를 함께 연결해야합니다.

이 부속 조회는 모든 region의 이름을 생성합니다.

    SELECT DISTINCT wilayah FROM lokasi 

이 하위 쿼리는 각 영역의 주소 개수와 함께 영역 목록을 생성합니다. 그러나이 하위 쿼리의 결과 집합에는 주소가없는 영역이 생략됩니다.

   SELECT COUNT(*) num, kota_kab AS wilayah 
        FROM alamat_penerima 
       GROUP BY kota_kab 

이러한 하위 쿼리를 개별적으로 테스트하여 올바른지 확인할 수 있습니다. 그렇게하는 것이 중요합니다.

마지막으로 두 테이블을 마치 테이블 인 것처럼 결합합니다. (이것이 구조화 된 쿼리 언어라고하는 이유입니다.)

SELECT w.wilayah, a.num 
    FROM (
       SELECT DISTINCT wilayah FROM lokasi 
     ) w 
    LEFT JOIN (
       SELECT COUNT(*) num, kota_kab AS wilayah 
        FROM alamat_penerima 
       GROUP BY kota_kab 
     ) a ON w.wilaya = a.wilaya 

은 당신이 원하는 것을 얻을 수 있지만 주소 행 대신 0NULL을 보여주는 것입니다. (그 결과는 LEFT JOIN입니다.)이 쿼리의 첫 번째 줄을 대신 사용하여 0 값을 입력 할 수 있습니다.

SELECT w.wilayah, IFNULL(a.num,0) num 

디자인 트릭은 첫 번째 하위 쿼리는 LEFT이 결과로 이어지는 하위 쿼리의 정보를 넣어 가입 사용 후, 당신의 결과 세트의 행의 수를 결정하는 것입니다.

+0

whoaa great !! 감사 –