如何在MySql中使用Group By实现以下结果?

时间:2016-05-03 11:49:20

标签: mysql database group-by

请考虑以下表格:

client_id

我正在尝试按TradeDate<client-id, TradeDate>对这些数据进行分组。因此,最终数据集将包含每个servicetype对的每一行。 我想从这些数据中计算以下功能:

  1. 对于每对中的每种类型的SEGMENT,我想计算订单总和和OrderAmount

  2. 同样,对于每对中的每种类型的OrdChannel,我想计算订单总和和OrderAmount

  3. 最后,每个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 | +------------+-----------+-------------+---------+------------+--------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+

  4. 因此,最终数据集将包含类似于以下所示的列:

    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)
    

2 个答案:

答案 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

并为你需要的每一笔钱重复这个过程。