SQL中的复杂聚合

时间:2016-06-27 22:28:48

标签: sql

我想要做的就是获取一个数据集,显示我下了多少订单以及为每个订单拨打了多少电话。我还需要在同一张表中的通话日期和订单日期。该表是10M +行,因此结果集的聚合对于分析是必不可少的。 我想要做的唯一分析是调用总数/总订单,并且能够查看订单范围内订单生成的support_tickets数量,最多为call_date 。非常简单,但编码非常复杂。这是我的尝试。我也尝试将下面的内容改为联合,但仍然得到错误的聚合结果。

-- The Query:-
SELECT
category_name
count(order_code)
order_date
sum(support_ticket_call)
call_date
FROM 
(Select distinct name, order_code, order_date from table1) b
left join 
(select count(call_ids), call_date FROM table2) b
on b.order_ID_code = a.order_id_code
group by category_name, order_date, call_date

每当没有support_ticket_calls时,call_date为NULL,正如您所期望的那样。订单数量虽然是60,000,但与结果集的其余部分通常的12个左右不同。我知道这个查询出了什么问题,但是到目前为止,它让我疯狂地试图解决它。

1 个答案:

答案 0 :(得分:0)

如果没有样本数据和预期结果,回答这个问题有点困难,但是评论太长了。

您当前的查询有几个问题。首先,您需要使用join条件在日期字段上on。您还需要将group by添加到使用聚合的查询中。最后,support_ticket_call来自哪里?我可以假定它是count(call_ids)的别名吗?

这样的事情会让你接近:

SELECT
    a.name as category_name,
    count(a.order_code),
    sum(b.support_ticket_call),
    a.order_date as call_date
FROM 
    (Select distinct name, order_code, order_date 
     from table1) a
left join 
    (select count(call_ids) as support_ticket_call, call_date 
     from table2 group by call_date) b on a.order_date = b.call_date
group by a.name, a.order_date