我正在尝试编写此查询,这将计算除包含类型值的列之外的所有列的平均值,我将整个查询分组。
因此,对于4种类型,结果表中的每一列都将包含所有其他三种类型值的平均值,我需要排除当前类型的行。
例如,如果我要为自己计算每种类型的平均值,则查询将如下所示:
SELECT
SUM(some value) / COUNT(TYPE)
FROM TEMPTABLE
GROUP BY TYPE
现在我正在尝试计算其他三个人的总平均值。感谢。
答案 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)