我有一张table,每一行都是某个日期进行销售的供应商。
我试图计算2019年每个供应商的平均日销售额,得到一个单一的数字。我想这意味着我要计算平均值的平均值。
这是我正在考虑的查询,但是在这个大表上需要很长时间。有没有更聪明的方法来计算这个平均值而不需要这么多嵌套?我觉得我扫描行的次数比我需要的要多。
-- Average of all vendor's average daily sale counts
SELECT AVG(vendor_avgs.avg_daily_sales) avg_of_avgs
FROM (
-- Get average number of daily sales for each vendor
SELECT vendor_daily_totals.memberdeviceid, AVG(vendor_daily_totals.cnt)
avg_daily_sales
FROM (
-- Get total number of sales for each vendor
SELECT vendorid, COUNT(*) cnt
FROM vendor_sales
WHERE year = 2019
GROUP BY vendorid, month, day
) vendor_daily_totals
GROUP BY vendor_daily_totals.vendorid
) vendor_avgs;
我很好奇是否有一种方法可以更有效地计算平均数的平均值。
顺便说一句,这是在 Impala 里跑的。
1条答案
按热度按时间7hiiyaii1#
我想你可以一次计算一下:
这将得到总数并除以天数。然而,
COUNT(DISTINCT)
可能比嵌套的还要慢GROUP BY
在 Impala ,所以你需要测试一下。