Рассмотрим следующую таблицу:Как добиться следующего результата с помощью группы By в MySql?
+------------+-----------+-------------+---------+------------+--------+-------------+
| client_id | TradeDate | servicetype | SEGMENT | OrdChannel | orders | OrderAmount |
+------------+-----------+-------------+---------+------------+--------+-------------+
| 1 | 20140611 | Type_1 | CASH | TT | 1 | 39275 |
| 2 | 20150119 | Type_1 | CASH | DNT | 2 | 11856.9 |
| 3 | 20150922 | Type_1 | FNO | OTHER | 1 | 854750 |
| 4 | 20151223 | Type_1 | CASH | TT | 5 | 71075 |
| 5 | 20140529 | Type_1 | Offline | FNO | 1 | 0 |
| 6 | 20160310 | Type_2 | CASH | WEB | 2 | 8009.6 |
| 7 | 20150318 | Type_1 | Offline | FNO | 2 | 432900 |
| 8 | 20150914 | Type_2 | CASH | WEB | 2 | 15612 |
| 9 | 20160317 | Type_2 | FNO | MINI | 1 | 9000 |
| 10 | 20140421 | Type_1 | CASH | TT | 8 | 17112.5 |
+------------+-----------+-------------+---------+------------+--------+-------------+
Я пытаюсь сгруппировать эти данные по client_id
и TradeDate
. Таким образом, окончательный набор данных будет содержать каждую строку для каждой пары <client-id, TradeDate>
. Я хочу, чтобы вычислить следующие особенности этих данных:
Для каждого типа сегмента в каждой паре, я хочу, чтобы вычислить сумму заказов и OrderAmount
Аналогично, для каждого типа OrdChannel в каждом пара, я хочу, чтобы вычислить сумму заказов и OrderAmount
Наконец, подсчет каждого
servicetype
т.е.Type_1
иType_2
.
Таким образом, окончательный набор данных будет содержать столбцы, подобные, как показано ниже:
+------------+-----------+-------------+---------+------------+--------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
| client_id | TradeDate | SEGMENT_CASH_orders_sum | SEGMENT_CASH_OrderAmount_sum.... | OrdChannel_TT_orders_sum | OrdChannel_TT_OrderAmount_sum.... | servicetype_Type_1_count | servicetype_Type_2_count |
+------------+-----------+-------------+---------+------------+--------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
До сих пор я пытался:
select clientsrno, TradeDate, SEGMENT, COUNT(orders) from orders group by clientsrno, TradeDate, SEGMENT;
, но это не дает отдельные столбцы для SEGMENT_CASH-orders_sum
и т.д.
Вместо этого выход, который я получаю:
+------------+-----------+---------+---------------+
| clientsrno | TradeDate | SEGMENT | COUNT(orders) |
+------------+-----------+---------+---------------+
| 44 | 20141209 | CASH | 23 |
| 44 | 20141211 | FNO | 10 |
+------------+-----------+---------+---------------+
Почему бы не обеспечить желаемый результат? – Strawberry