2016-10-18 11 views
-1

수정 된 기록 필드의 합을 100으로 제한하고 각 계정별로 그룹화하려고합니다. 아래 쿼리는 charged_quantity = 60 인 CDR_Accounts의 모든 행의 합계를 추출하며 제한하지 않습니다GROUP_CONCAT가 100 개의 값으로 제한되지 않습니다.

table1 = table2이며 임시 테이블입니다. 쿼리를 단순화하고 임시 테이블의 모든 데이터를 필터링했습니다.

그럼에도 불구하고 쿼리는 여전히 모든 '기록'필드의 총 합계를 제공하지만 합계가 100 개만 필요합니다.

표/표 2 형식 :

+-----------+----------+------------+-------------+----------------------+ 
| i_account | id  | account_id | CLD   | history    | 
+-----------+----------+------------+-------------+----------------------+ 
|  10272 | 46479968 | 0814781293 | 27815212963 | [email protected]%=1.32 | 
|  6316 | 46480100 | 0813741427 | 27780233136 | [email protected]%=1.32 | 
|  6316 | 46480107 | 0813741427 | 27780233136 | [email protected]%=1.32 | 
|  13830 | 46480435 | 0814346396 | 27781356515 | [email protected]%=1.32 | 
|  13830 | 46480436 | 0814346396 | 27781356515 | [email protected]%=1.32 | 
+-----------+----------+------------+-------------+----------------------+ 

계정

SELECT sum(SUBSTRING_INDEX(history,'=',-1)), 
       cdr.i_account, 
       cdr.account_id 
     FROM table1 cdr 
      WHERE cdr.id IN 
       (SELECT SUBSTRING_INDEX(group_concat(s.id SEPARATOR ','), ',', 100) id 
       FROM table2 s 
       GROUP BY id 
       ) 
        GROUP BY i_account; 
+0

@Tim Biegeleisen 목적이 100으로 제한되며 '제한'을 사용할지 여부는 중요하지 않습니다. – Vadym

+0

생각하지 않습니다 group_concat은 사용중인 방식대로 사용할 수 있습니다. group_concat은 쉼표로 구분 된 문자열을 만듭니다. 그래서 여러분의 시작은 다음과 같습니다 :'WHERE '60'IN ('10, 20,40,60 ')'. 해당 하위 선택을 '(SELECT charged_quantity FROM CDR_Accounts GROUP BY i_account LIMIT 100)'로 변경할 수 있습니다. – CptMisery

+0

@cptMisery in 하위 쿼리는 mysql에서 불가능합니다. 또한 쿼리를 수정했지만 예상 결과가 아직 나오지 않습니다. – Vadym

답변

0

내가 어떤 쿼리가 수행에 대한 명확하지 않다. 그러나 그룹핑을 포함하는 최종 결과에는 한도가 적용됩니다. GROUP_CONCAT의 결과를 제한하려면 먼저 제한을 적용한 다음 그룹을 적용하십시오.

+0

하위 쿼리의 제한이 작동하지 않습니다. – Vadym