选择不同的列组合后聚合组

时间:2015-08-24 18:30:12

标签: sql sqlite

我有一个包含大约5亿行和49列各种数据类型的表,在SQLite数据库中的非可空列user_idorder_id上有一个复合索引。

对于与订单中的唯一商品相对应的相同user_idorder_id,会显示多行。例如,订单可能如下所示(不包括不相关的列):

  USER_ID      ORDER_ID  ORDER_TOTAL ORDER_DATE  CATEGORY  ITEM_TOTAL
---------  ------------  ----------- ----------  --------  ----------
094f077b2  47f12c149808       330.41 2015-03-01      BEER       20.30
094f077b2  47f12c149808       330.41 2015-03-01      BEER       36.23 
094f077b2  47f12c149808       330.41 2015-03-01      BEER       55.03 

如您所见,订单中缺少商品,因为item_total的总和不等于order_total

我想为每个order_date提取order_totalorder_categoryorder_id的唯一值,以便按日期计算有效的类别总数。

我提出了两个最明显的解决方案:

SELECT category, order_date, SUM(order_total) 
  FROM (
    SELECT DISTINCT category, order_id, order_date, order_total
      FROM order_history
    )
  GROUP BY category, order_date
;

SELECT category, order_date, SUM(order_total) 
  FROM (
    SELECT category, order_id, order_date, AVG(order_total)
      FROM order_history
      GROUP BY category, order_id, order_date
    )
  GROUP BY category, order_date
;

AVG()也可以是MIN()MAX(),以达到相同的效果。这些中的任何一个优先于另一个,还是有更好的方法来实现这一目标?

0 个答案:

没有答案