我正在尝试编写这个查询,它将计算除包含类型值的列之外的所有列的平均值,我将整个查询按该值进行分组。
例如,对于4种类型,结果表中的每一列都将包含所有其他三种类型的值的平均值,我需要排除当前类型的行。
例如,如果我要计算每种类型自身的平均值,查询将如下所示:
SELECT
SUM(some value) / COUNT(TYPE)
FROM TEMPTABLE
GROUP BY TYPE
现在我正在尝试计算其他三个的总平均值。谢谢。
发布于 2010-07-23 11:44:58
您可以执行一次查询来获取不同的类型,然后对同一个表执行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
但第一个解决方案可能执行得更好,因为行数较早减少。
发布于 2010-07-23 11:51:59
这里的起点是在您的类型和temptable之间建立一个笛卡尔连接(猜测您的表结构是: type(id,type_id),valueTable(id,type_id,some_value))
以下查询
SELECT t.type,SUM(vt.someValue) / COUNT (*) AS sum FROM type t,valueTable vt WHERE vt.type_id != t.id GROUP BY t.type
应该能行得通。
发布于 2010-07-23 11:55:35
应该也能在Sybase上运行:
SELECT
SUM(some value) / SUM(CASE WHEN TYPE = 1 THEN 1 ELSE 0 END)
FROM TEMPTABLE
GROUP BY TYPE
https://stackoverflow.com/questions/3317750
复制相似问题