2011-12-01 3 views
0

와일드 카드와 함께 행을 그룹화하는 MySQL 쿼리를 작성하려고합니다. 이것이 가능한가?MySQL 와일드 카드로 그룹화하는 방법

내 테이블에는 다음과 같은 행이 있습니다

Region 
  1. 사우스
  2. 사우스 마이애미
  3. 사우스 마이애미 : 마이애미 비치
  4. 사우스 마이애미
  5. 사우스
  6. 남쪽 : 마이애미 : 마이애미 비치
  7. 사우스
  8. 사우스 마이애미 현재 다음과 같은 쿼리를 사용하여

:

SELECT `region`, count(*) as `TOTAL` FROM `table` WHERE 1=1 group by `region` 

다음과 같은 출력을 제공합니다 지역 총

1. South       3 
2. South: Miami      3 
3. South: Miami: Miami Beach  2 

어떻게에 대한 쿼리를 조정할 수 있습니다 followinng 산출물을 줘?

Region      Total 

1. South       8 
2. South: Miami      5 
3. South: Miami: Miami Beach  2 

도움 주셔서 감사합니다. 이 (내가 그렇게 멀리 갈 필요하지 않았을 때 나는 시간을 자신을 했어) 정상화의 기본 원칙을 따르지 않는 사실을 따로 설정

+3

해당 쿼리는 이미 원하는 출력을 제공하지만 사용자가 제공 한 출력은 제공하지 않습니다. –

+0

그래, 벌써 두 번째 결과가 나와야합니다. –

+0

그러나 첫 번째 출력을 원하면 afaik 단일 쿼리에서이를 수행 할 수 없습니다. 각 행은 한 번만 반환되기 때문에 group-by count()의 합계가 데이터베이스 크기를 초과해서는 안됩니다. –

답변

1

이 해커 작동합니다 :

SELECT a.region, (a.total + COUNT(b.region)) AS total 
FROM 
    (SELECT region, COUNT(*) AS total 
     FROM table 
     GROUP BY region 
    ) AS a 
    LEFT JOIN table b 
    ON b.region LIKE CONCAT(a.region, ":%") 
GROUP BY a.region 

명심해야 할 점은 지역에 대한 색인을 가져야하며, 정규화 된 표 (예 : Region, ParentRegion)를 사용하는 것이 좋습니다. 건배!

관련 문제