我试图从我的数据库中得到一些不同值的平均值。
作为一个例子,我将使用一个purchases表。我们的用户以不同的方式输入信息。他们中的一些人分开发票,把他们放在正确的供应商,其他人只是输入一个完整的价值为他们所有。那些使用全部价值的,是容易的。我知道我可以跑了
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\u购买中得到
这是正确的方法还是有更好的方法来获得这个平均值。
1条答案
按热度按时间goqiplq21#
如果我理解正确,您可以尝试使用子查询
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