mysql - 检索条件取决于其他表的变量的平均值
问题描述
我正在尝试根据条件计算表 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
我不明白为什么。
解决方案
这是一个部分更正的查询,主要是因为您没有向我们展示您的完整代码。看起来你应该按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
在这里添加更有意义。
推荐阅读
- mvvm - MVVM、数据绑定、改造和回收站视图
- javascript - 无法从数组中解构映射函数。为什么?
- amazon-web-services - 使用 AWS Go 开发工具包创建客户端时出现 UnrecognizedClientException
- java - 在java中使用不同的分隔符分割字符串
- mysql - Restoring a mysql slave from raw Master files, instead of mysqldump?
- php - 当我使用 php curl 在 API 中将 XML 数据作为发布请求发送时,XML 文件丢失?
- data-structures - 二叉堆数据结构问题
- bash - 如何在 Bash 中比较两个十六进制字符串?
- r - 如何在ggplot2中每个组的底部添加geom_text标签
- java - 如何使用 Axis 客户端传递自定义 SSLContext 来调用 SOAP 服务?