计算除当前类型之外的所有其他类型

时间:2010-07-23 11:37:20

标签: sql tsql sybase sum average

我正在尝试编写此查询,这将计算除包含类型值的列之外的所有列的平均值,我将整个查询分组。

因此,对于4种类型,结果表中的每一列都将包含所有其他三种类型值的平均值,我需要排除当前类型的行。

例如,如果我要为自己计算每种类型的平均值,则查询将如下所示:

SELECT

SUM(some value) / COUNT(TYPE)

FROM TEMPTABLE
GROUP BY TYPE

现在我正在尝试计算其他三个人的总平均值。感谢。

5 个答案:

答案 0 :(得分:1)

您可以执行一个查询来获取不同的类型,并LEFT JOIN检查同一个表,检查类型不等式:

SELECT t1.type,
       SUM(t2.some_value) / COUNT(t2.type)
FROM ( SELECT DISTINCT type FROM temptable ) t1
LEFT JOIN temptable t2 ON ( t1.type <> t2.type )
GROUP BY t1.type

由于您只想要平均值,因此可以替换

FROM ( SELECT DISTINCT type FROM temptable ) t1

通过

FROM temptable t1

但是第一个解决方案可能会表现得更好,因为行数会提前减少。

答案 1 :(得分:0)

这里的出发点是在你的类型和你的temptable之间建立一个笛卡尔联接(猜测你的表结构是:type(id,type),valueTable(id,type_id,some_value))

以下查询

  

SELECT t.type,SUM(vt.someValue)/   COUNT(*)AS总和FROM t,   valueTable vt WHERE vt.type_id!= t.id.   GROUP BY t.type

应该这样做。

答案 2 :(得分:0)

也应该在Sybase上工作:

SELECT
   SUM(some value) / SUM(CASE WHEN TYPE = 1 THEN 1 ELSE 0 END)
FROM TEMPTABLE
GROUP BY TYPE

答案 3 :(得分:0)

答案 4 :(得分:0)