2013-08-12 1 views
0

을 계산 ...MySQL의 쿼리는 합계를 얻고 지금 다음 쿼리를 사용하고

SELECT id, account_number, 
     (SELECT count(*) 
     FROM `member_tbl` t2 
     WHERE t2.referred_by = t1.account_number 
     ) AS total_referred 
FROM `member_tbl` t1; 

을 그리고 그 다음과 같은 결과를 제공합니다 ...

id - id of memenr 
account_number - account number of user 
total_referred - total number of members referred by account_number 

하지만 우리는 좀 더 싶어합니다

total_reffered2 - total number of members that THEY(all accounts referred by account_number) all referred 

total_reffered3 - total number of members that referred by all members of total_reffered2 

확인하시기 바랍니다 다음과 같은 결과 ... mysql fiddle

mysql fiddle data에 따라, 쿼리는 다음과 같은 값을 반환해야합니다 ...

| id | account_number | referred_by1 | referred_by2 | referred_by3 
+----+-----------------+---------------+--------------+------------- 
| 1 | ac203003  | 0    | 0   | 0 
+----+-----------------+---------------+--------------+------------- 
| 2 | ac203004  | 1    | 1   | 0 
+----+-----------------+---------------+--------------+------------- 
| 3 | ac203005  | 2    | 1   | 1 
+----+-----------------+---------------+--------------+------------- 

내가 당신에게 또 다른 예

을주게 모든 구성원은 항상 다음 10 개 추천을했다 ... 경우

referred_by1 = 10 
referred_by2 = 100 
referred_by3 = 1000 

혼란 스럽습니다. 어떻게이 쿼리를 작성합니까?

답변

0

글쎄, 더 복잡한 쿼리를 사용하면 현재 나와있는 경로를 그대로 유지할 수 있습니다. 나는 이것이 당신이 원하는 것이라고 생각합니다 :

SELECT id, account_number, 
     (SELECT count(*) 
     FROM `member_tbl` t2 
     WHERE t2.referred_by = t1.account_number 
     ) AS total_referred, 
     (SELECT count(*) 
     FROM `member_tbl` t2 join 
       member_tbl t3 
       on t3.referred_by = t2.account_number 
     WHERE t2.referred_by = t1.account_number 
     ) AS refer4ed_by_2, 
     (SELECT count(*) 
     FROM `member_tbl` t2 join 
       member_tbl t3 
       on t3.referred_by = t2.account_number join 
       member_tbl t4 
       on t4.referred_by = t3.account_number 
     WHERE t2.referred_by = t1.account_number 
     ) AS referred_by_3 
FROM `member_tbl` t1; 

이것은 SQL Fiddle의 "expected"결과와 일치하지 않습니다. 그러나 다시 예상되는 결과에는 올바른 행 수가 없으므로 올바른 결과를 얻지 못합니다.

+0

답장을 보내 주셔서 감사합니다. 메인 DB에서 시도해 볼 것이고, 그러면 다시 알려 드리겠습니다. 감사합니다. – seoppc

+0

Nice find but EXPLAIN이 DEPENDENT SUBQUERY에서 6 ​​개의 행을 보여주고 색인을 생성하면 속도가 향상되지 않기 때문에 아마도 더 큰 세트에서 느려질 것입니다. –

+0

@RaymondN 그래서 속도를위한 솔루션은 무엇입니까? 우리의 db가 실제로 10,000 행 정도 크기 때문에 – seoppc