2013-06-26 4 views
0

미리 감사드립니다. 내 문제를 살펴보십시오. 내가 노력하고있는 것은 사용자 거래 내역을 가져 와서 모든 전체 주문의 수익을 합한 다음이 총 주문을 세그먼트로 그룹화하고 각 세그먼트에있는 사용자 수를 계산하는 것입니다.MySQL - 합계를 기준으로 범위로 그룹화

기본적으로 하나의 테이블을 사용하여 수익 데이터를 집계합니다. REVENUE 테이블은 모든 목적과 목적에 맞게 구성되어 있습니다.

열 | 123
ORDER_NUMBER | | 데이터

ID 샘플 123ABC
수익 | 10

각 레코드는이 같은 구조와 각 구매에 대한 하나의 기록이있다. | 나는이
ID와 같은

SELECT ID, SUM(ROUND(REVENUE)) as Total_Rev 
FROM REVENUE 
GROUP BY ID 
ORDER BY ID 

내가 얻을 출력 ID로 매출을 집계하는 다음과 같은 SQL을 사용 Total_Rev
1002436 | 11
1002437 | 12
1002438 | 5
10024399 | 2
100244 | 4
10024544 | 21
10024584 | 16
10024624 | 4
1002478 | 8
10024789 | 12
10024843 | 4
10024944 | 9

그래서 내가 뭘하려고 그룹 입니다 ID의 그때 각 세그먼트에서 사용자 아이디를 계산 할 3 개 미리 정의 된 세그먼트로 Total_rev에 의해.

내 세그먼트는 다음과 같이 Total_Rev에 의해 정의된다 :
낮음 : 1-5
메드 : 6-20
높음 : 21+

을 그냥 적절한를 만드는 방법을 모르겠습니다 이 세분화 운동을 수행하는 SQL. 다시 한번 검토해 주셔서 감사 드리며이 문제에 대한 자세한 내용을 보내 주시거나 피드백에 답변 해 드리겠습니다.

감사합니다, 크리스

답변

0

같이 그것을 시도 : 나는 동일한 기능을 수행하는 더 우아한 방법이 될 수 있다고 생각

SELECT ID, LMH FROM (
    SELECT ID, SUM(ROUND(REVENUE)) as Total_Rev, 'LOW' as LMH 
     FROM REVENUE 
     GROUP BY ID 
     HAVING Total_Rev > 0 AND Total_Rev <= 5 
    UNION ALL 
    SELECT ID, SUM(ROUND(REVENUE)) as Total_Rev, 'Med' as LMH 
     FROM REVENUE 
     GROUP BY ID 
     HAVING Total_Rev > 5 AND Total_Rev <= 20 
    UNION ALL 
    SELECT ID, SUM(ROUND(REVENUE)) as Total_Rev, 'High' as LMH 
     FROM REVENUE 
     GROUP BY ID 
     HAVING Total_Rev > 20) as subquery 
    ORDER BY ID 

을하지만, 내 문이 너무 작동합니다 =)

+0

감사합니다 5im, 나는 이것을 오늘 발사 할 것이고 그것이 어떻게 나오는지 알려줄 것이다. –

+0

그냥 내 데이터 세트에 맞게 약간의 수정을 가한이 형식을 사용하면 잘 작동합니다. 다시 한 번 감사드립니다! –

관련 문제