请考虑以下表格:
client_id
我正在尝试按TradeDate
和<client-id, TradeDate>
对这些数据进行分组。因此,最终数据集将包含每个servicetype
对的每一行。
我想从这些数据中计算以下功能:
对于每对中的每种类型的SEGMENT,我想计算订单总和和OrderAmount
同样,对于每对中的每种类型的OrdChannel,我想计算订单总和和OrderAmount
最后,每个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 |
+------------+-----------+---------+---------------+
等提供单独的列。
相反,我得到的输出是:
def fpUpdateList(el: List[Int]) = el.map(Math.abs)
答案 0 :(得分:1)
你可以用很多钱(CASE .... END)
这是对第一栏的建议
select client_di, TradeDate
sum (case SEGMENT
when 'CASH' then orders ELSE 0 END) as SEGMENT_CASH_orders_sum,
sum (case SEGMENT
when 'CASH' then OrderAmount ELSE 0 END) as SEGMENT_CASH_ordersAmount_sum,
sum (case SEGMENT
when 'FNO' then orders ELSE 0 END) as SEGMENT_FNO_orders,
sum (case SEGMENT
when 'FNO' then OrderAmount ELSE 0 END) as SEGMENT_FNO_ordersAmount_sum
from my_table
group by client_id, TradeDate
答案 1 :(得分:0)
你可以这样做:
SELECT clientsrno, TradeDate, SEGMENT, COUNT(orders), sumOrders.total FROM tabletest
INNER JOIN (
SELECT tabletest.tradeDate, SUM(orders) as total FROM tabletest
GROUP BY clientsrno, TradeDate, SEGMENT
) sumOrders ON tableTest.tradeDate = sumOrders.tradeDate
GROUP BY clientsrno, TradeDate, SEGMENT
并为你需要的每一笔钱重复这个过程。