首页 > 解决方案 > 检索条件取决于其他表的变量的平均值

问题描述

我正在尝试根据条件计算表 b 中变量的平均值,该平均值取决于另一个表 c 中变量的不同值。

我设法检索表 c 的不同值并添加 where 子句。但我只得到第一个不同值的结果。

SELECT
    AVG(B.VAR1),
    ITERVAR
FROM TableC C, TableB B
WHERE C.ID = B.ID AND C.ITERVAR IN (SELECT DISTINCT(C.ITERVAR) AS ITERVAR
                                    FROM TableC C WHERE WHERECLAUSE)
AND
WHERECLAUSE;

预期结果是:

VAR1        | ITERVAR
AVG value 1 | iter value 1
AVG value 2 | iter value 2
....
AVG value N | iter value N

我得到:

VAR1        | ITERVAR
AVG value 1 | iter value 1

我不明白为什么。

标签: mysql

解决方案


这是一个部分更正的查询,主要是因为您没有向我们展示您的完整代码。看起来你应该按ITERVAR列聚合,所以尝试添加一个GROUP BY子句来做到这一点:

SELECT
    AVG(b.VAR1),
    ITERVAR
FROM TableB b
INNER JOIN TableC b
    ON b.id = c.id AND
       c.ITERVAR IN (SELECT DISTINCT(x.ITERVAR) AS ITERVAR
                     FROM TableC x WHERE WHERECLAUSE) AND
<WHERECLAUSE>
GROUP BY
    ITERVAR;

实际上,您当前的查询不会在大多数其他数据库上运行,也不会在 MySQL 中的某些服务器模式上运行。这是没有意义的,因为您选择的是整个表的平均值以及单个(非聚合)列值ITERVAR。目前尚不清楚您希望 MySQL 从整个表中的所有值中为您提供哪个值。ITERVAR但是GROUP BY在这里添加更有意义。


推荐阅读