2012-12-06 7 views
1

쿼리의 결과를 요약하려고하는데 어려움을 겪고 있습니다. 아래의 쿼리는 fax_authorized 테이블을 확인하고 전자 메일 주소가 포함 된 확장명 요약을 생성합니다.MySQL 쿼리의 요약 요약

SELECT extended_number, IF(COUNT(extension_id)<5,1,0) AS 'fax5', 
    IF(COUNT(extension_id)>5 AND COUNT(extension_id)<11,1,0) AS 'fax10', 
    IF(COUNT(extension_id)>10,1,0) AS 'fax10+', COUNT(extension_id) AS 'fax_total' 
FROM fax_authorized fa, extension e 
WHERE fa.extension_id = e.id 
GROUP BY extended_number; 

출력은 다음과 같습니다 :

나는 다음과 같은 쿼리가 내가 좋아하는 것이 무엇

+-----------------+------+-------+--------+-----------+ 
| extended_number | fax5 | fax10 | fax10+ | fax_total | 
+-----------------+------+-------+--------+-----------+ 
| 0009*004  | 1 |  0 |  0 |   1 | 
| 0139*601  | 0 |  1 |  0 |   6 | 
| 0139*743  | 1 |  0 |  0 |   2 | 
| 0139*996  | 1 |  0 |  0 |   1 | 
+-----------------+------+-------+--------+-----------+ 

는 왼쪽에 따라이 데이터를 요약하는 것입니다 (extended_number를, 4)에 대한 있도록 위의 예제 0139는 fax5 = 2, fax10 = 1, fax_total = 9를 갖습니다.

나는이 작동하지 않는이, 시도 :

SELECT extended_number, SUM(IF(COUNT(extension_id)<5,1,0)) AS 'fax5', 
    SUM(IF(COUNT(extension_id)>5 AND COUNT(extension_id)<11,1,0)) AS 'fax10', 
    SUM(IF(COUNT(extension_id)>10,1,0)) AS 'fax10+', 
    COUNT(LEFT(extension_id,4)) AS 'fax_total' 
FROM fax_authorized fa, extension e 
WHERE fa.extension_id = e.id 
GROUP BY LEFT(extended_number,4); 

편집 : 나는 아래이 문제를 해결하기 위해 Saharsh 샤의 대답을 사용하지만, 내가 추가하는 가치라고 생각 다른 일을했다. 내 중첩 된 하위 쿼리 솔루션에서보기를 만들려고했으나 하위 쿼리가보기에 허용되지 않아 연결할 수 없습니다.

CREATE VIEW vw_xoom_faxdetail AS 
    SELECT LEFT(extended_number,4) client_id, 
    IF(COUNT(extension_id)<5,1,0) AS 'fax5', 
    IF(COUNT(extension_id)>5 AND COUNT(extension_id)<11,1,0) AS 'fax10', 
    IF(COUNT(extension_id)>10,1,0) AS 'fax10plus', 
    COUNT(extension_id) AS 'fax_total' 
FROM fax_authorized fa, extension e WHERE fa.extension_id = e.id 
GROUP BY client_id; 

CREATE VIEW vw_xoom_fax AS 
SELECT client_id, SUM(fax5) fax5, SUM(fax10) fax10, 
    SUM(fax10plus) 'fax10+', SUM(fax_total) fax_total 
FROM vw_xoom_faxdetail 
GROUP BY client_id; 
+0

당신은 결함이 무엇을 의미합니까 다음과 같이 그래서 나는이 관련 뷰를 생성? –

+0

@Jack - 죄송합니다. 작동하지 않는다는 의미인데, 구문 오류가 발생했습니다. – btongeorge

답변

0

이 시도 :

SELECT extended_number, SUM(fax5) fax5, SUM(fax10) fax10, SUM(fax10plus) 'fax10+', SUM(fax_total) fax_total 
FROM (SELECT LEFT(extended_number,4) extended_number, IF(COUNT(extension_id)<5,1,0) AS 'fax5', 
      IF(COUNT(extension_id)>5 AND COUNT(extension_id)<11,1,0) AS 'fax10', 
     IF(COUNT(extension_id)>10,1,0) AS 'fax10plus', COUNT(extension_id) AS 'fax_total' 
     FROM fax_authorized fa, extension e WHERE fa.extension_id = e.id 
     GROUP BY extended_number) AS A 
GROUP BY extended_number; 
+0

훌륭한 작품! 감사. 그래서 이것을 올바르게 이해합니다. 귀하의 솔루션은 내 집계 쿼리를 다른 쿼리 안에 중첩하는 것입니까? 사실 내부 쿼리와 외부 쿼리 모두에서 extended_number를 사용하여 약간 혼란 스러웠습니다. 실제로 외부 쿼리에서는 extended_number의 왼쪽 4 문자 만이었습니다. – btongeorge

+0

이제 다른 문제가 있습니다 - 내 DB에서 사용하려면이 쿼리에서 뷰를 만들고 싶지만 오류가 발생합니다. ERROR 1349 (HY000) : 뷰의 SELECT에 FROM 절의 하위 쿼리가 포함되어 있습니다. – btongeorge

+0

하위 쿼리 aren이 나타납니다. 뷰 정의에 허용 된 - 두 개의 관련 뷰 정의를 대신 작성한 방법을 보여주는 질문을 편집했습니다. – btongeorge