2013-06-26 5 views
0

Заранее благодарим за рассмотрение моей проблемы. Я пытаюсь взять историю транзакций пользователей и суммировать доход от всех своих общих заказов, затем группировать эти общие заказы по сегментам и подсчитывать количество пользователей в каждом сегменте.MySQL - GROUPING в диапазоны на основе SUM

В основном я использую единую таблицу для агрегирования данных о доходах. Таблица REVENUE таблица для всех целей и целей структурирована следующим образом.

Колонны | Образец данных
ID | 123
ORDER_NUMBER | 123abc
ДОХОДЫ | 10

Каждая запись структура, как это и есть одна запись для каждой покупки. Я использую следующий SQL агрегировать ДОХОДЫ по ID

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

я получаю и выход как этот
ID | Всего_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

Так что я пытаюсь сделать, это группа идентификаторами по Total_rev в 3 предопределенных сегментов, то я хочу считать идентификатор пользователя и в каждом сегменте.

Мои сегменты определяются Total_Rev как это:
Low: 1-5
Med: 6-20
High: 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

Просто использовал этот формат с небольшими изменениями, чтобы соответствовать моему набору данных, и он работал хорошо. Еще раз спасибо! –