从具有不同条件的表中选择总和和平均值
Posted
技术标签:
【中文标题】从具有不同条件的表中选择总和和平均值【英文标题】:Select sum and average from table with different condition 【发布时间】:2020-08-16 18:23:41 【问题描述】:我有一个 PostgreSQL 表,如屏幕截图所示
我想在同一个查询中获取以下数据
所有单位的总和 所有 unit_price 的平均值,仅当单位 > 0 时我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:我只会使用条件聚合。在 Postgres 中,使用 filter
:
select sum(units),
avg(unit_price) filter (where units > 0)
from t;
【讨论】:
【参考方案2】:这是一种可能的方法(注意:我无权访问 PostgreSQL 来检查语法,所以我在这里提供一种伪代码而不检查它)。
SELECT SUM(UNITS) AS UNITS_SUM ,
SUM(UNIT_PRICE)/POSS_UNITS_COUNT AS AVERAGE_UNIT_PRICE
FROM
(SELECT UNITS AS UNITS ,
CASE WHEN UNITS > 0 THEN 1
ELSE 0
END AS POSS_UNITS_COUNT ,
CASE WHEN UNITS > 0 THEN UNIT_PRICE
ELSE 0
END AS UNIT_PRICE
FROM Your_Table) A ;
请注意,如果您的表中没有正价格,这将产生 DIVIDE BY 0 错误(我假设这种情况不存在;如果存在,您应该使用CASE
其中 POSS_UNITS_COUNT 必须 > 0。
【讨论】:
什么会更快,这个或触发两个查询分别获取总和和平均值 显然是这个:在这里,表/索引只扫描一次,而在您的情况下,您将导致两次连续扫描。另外,请注意,外部 SELECT 从单行表(内部 SELECT)中获取其数据,因此不应将其视为 真正的选择。以上是关于从具有不同条件的表中选择总和和平均值的主要内容,如果未能解决你的问题,请参考以下文章
无法从 SQLPLUS 中的 select 语句创建的表中选择数据