我有一个包含大约5亿行和49列各种数据类型的表,在SQLite数据库中的非可空列user_id
和order_id
上有一个复合索引。
对于与订单中的唯一商品相对应的相同user_id
和order_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_total
,order_category
和order_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()
,以达到相同的效果。这些中的任何一个优先于另一个,还是有更好的方法来实现这一目标?