从三个不同的表中按 SQL 中的平均值除以计数
Divide count by average in SQL from three different tables
我有三个 table,我使用每个 table 的计数来计算比率。
这是公式,我正在尝试使用 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);
有人可以帮忙吗?我基本上是想从一个 table 中得到一个计数,并将它除以两个单独的 table 的平均值。感谢您的帮助。
你的:
(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:
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
.
我有三个 table,我使用每个 table 的计数来计算比率。 这是公式,我正在尝试使用 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);
有人可以帮忙吗?我基本上是想从一个 table 中得到一个计数,并将它除以两个单独的 table 的平均值。感谢您的帮助。
你的:
(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:
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
.