从三个不同的表中除以 SQL 中的平均值

我有三张表,我使用每个表的计数来获得比率%。 这是公式,我正在尝试使用 MySQL 复制它

Count1.t1/AVERAGE(Count2.t2,Count3t.3)

到目前为止,平均值是有效的,这就是我所拥有的: 这个代码块给了我 t1 和 t2 之间的平均值。

SELECT AVG(ID.TAvg) FROM ( select count(*) as TAvg from t2 UNION Select count(*) as TAvg from t3) ID;

但是,如果我将 t1 计数除以平均值,它就会中断。

(SELECT COUNT(ID) from t1) / (SELECT AVG(ID.TAvg) FROM ( select count(*) as TAvg from t2 UNION Select count(*) as TAvg from t3) ID);

有人可以帮忙吗?我基本上是想从一张表中得到一个计数,然后将它与两个单独表中的平均值相除。感谢您的帮助。

yumikooo 回答:从三个不同的表中除以 SQL 中的平均值

您的:

(SELECT COUNT(ID) from t1) / (SELECT  AVG(ID.TAvg) FROM ( select count(*) as TAvg from t2 UNION Select count(*) as TAvg from t3) ID)

是你想要的值,但它是一个表达式,而不是一个选择。您只需添加一个选择:

SELECT (SELECT COUNT(ID) from t1) / (SELECT  AVG(ID.TAvg) FROM ( select count(*) as TAvg from t2 UNION Select count(*) as TAvg from t3) ID)

或在 from t1 中进行除法:

SELECT COUNT(ID) / (SELECT  AVG(ID.TAvg) FROM ( select count(*) as TAvg from t2 UNION Select count(*) as TAvg from t3) ID) from t1

(虽然你没有说“它打破”的实际含义;你实际上在 t1 中有一个 ID 列并且想要计算 ID 不为空的行吗?如果你只想计算 t1 中的所有行,做count(*)count(1),而不是count(ID)。)

另一件事:UNION 的意思是 UNION DISTINCT,它在合并后删除重复的行(而不是 UNION ALL,它只是合并来自两个查询的行)。由于您只是对两个表求平均值,所以没有问题,但是如果您要求和或对三个表求平均值,就会有问题。例如,如果您对 3、3 和 6 求平均值,使用 UNION ALL,将产生 4,但使用 UNION DISTINCT,它首先变为 3 和 6,产生平均值 4.5。您几乎总是想说 UNION ALL,而不仅仅是 UNION

本文链接:https://www.f2er.com/282.html

大家都在问