我正在尝试从数据库中获取许多不同值的平均值。
作为示例,我将使用“购买”表。我们的用户以不同的方式输入信息。其中一些将发票分开,然后将其放入正确的供应商,其他一些则只是为所有输入完整的价值。使用全部价值的是容易的。我知道我可以跑步
SELECT store_id, stocktake_id, SUM(cost_value)/COUNT(cost_value) FROM store_purchases GROUP BY store_id ORDER BY store_id DESC
它工作正常。但是,此查询不能为单独输入发票的用户提供正确的结果。
我尝试这样做
SELECT store_id, stocktake_id, SUM(cost_value)/(SELECT COUNT(cost_value) FROM store_purchases GROUP BY stocktake_id, store_id) FROM store_purchases GROUP BY store_id ORDER BY store_id DESC
但是我收到一条错误消息,说子查询返回了多个行。所以我尝试了以下解决方案
SELECT store_id, stocktake_id, SUM(cost_value)/count(DISTINCT stocktake_id) FROM store_purchases GROUP BY store_id ORDER BY store_id DESC
这是正确的解决方法吗?这是我从store_purchases中获得的结果的示例屏幕截图,该商店分别输入
这是正确的方法还是有更好的方法来求出平均值?
答案 0 :(得分:0)
如果我正确理解,可以尝试一下,使用子查询获取SUM
和COUNT
结果集,然后再获取join
SELECT t1.stocktake_id,t1.store_id, (totalPrice / cnt)
(
select stocktake_id,sum(store_purchases) totalPrice
FROM store_purchases
GROUP BY stocktake_id
)t1
join
(
select stocktake_id,store_id,count(store_purchases) cnt
FROM store_purchases
GROUP BY stocktake_id, store_id
)t2 on t1.stocktake_id = t2.stocktake_id