Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从内部查询在外部查询中执行算术运算_Sql_Ms Access - Fatal编程技术网

Sql 如何从内部查询在外部查询中执行算术运算

Sql 如何从内部查询在外部查询中执行算术运算,sql,ms-access,Sql,Ms Access,我是SQL新手,正在尝试在access中构建查询。我需要选择比平均比率小的两列的比率。 我能够首先对数据进行分组,以获得每列的总数。我还能够在以下查询中获得每个组的比率,该查询有效: SELECT col1, Ratio FROM ( SELECT ID, SUM(col3)/SUM(col4) AS Ratio FROM table1 GROUP BY ID ) AS Ratios INNER JOIN table2 ON Ratios.ID=table2.I

我是SQL新手,正在尝试在access中构建查询。我需要选择比平均比率小的两列的比率。 我能够首先对数据进行分组,以获得每列的总数。我还能够在以下查询中获得每个组的比率,该查询有效:

SELECT col1, Ratio
FROM (
    SELECT ID, SUM(col3)/SUM(col4) AS Ratio 
    FROM table1 
    GROUP BY ID
)  AS Ratios 
INNER JOIN table2 
ON Ratios.ID=table2.ID
但是,我只想显示那些小于平均比率的比率。我尝试了另一种方法,得到了一条消息:不能在WHERE子句中聚合函数

SELECT col1, Ratio
FROM (
    SELECT ID, SUM(col3)/SUM(col4) AS Ratio 
    FROM table1 
    GROUP BY ID
)  AS Ratios 
INNER JOIN table2 
ON Ratios.ID=table2.ID
WHERE Ratio<AVG(Ratio)

谁能帮我看看我做错了什么,我已经为此工作了几个小时,老实说,我在这里不知所措。

这是Access中一个痛苦的问题。您可以这样做:

SELECT col1, Ratio
FROM (SELECT ID, SUM(col3)/SUM(col4) AS Ratio 
      FROM table1 
      GROUP BY ID
     )  AS Ratios INNER JOIN
     table2 
     ON Ratios.ID = table2.ID
WHERE Ratio < (select AVG(Ratio)
               from (SELECT ID, SUM(col3)/SUM(col4) AS Ratio 
                     FROM table1 
                     GROUP BY ID
                    ) as t
              );

谢谢你,戈登,成功了!我可以使用HAVING子句来构建这个查询吗?再次感谢!
SELECT col1, Ratio
FROM (SELECT ID, SUM(col3)/SUM(col4) AS Ratio 
      FROM table1 
      GROUP BY ID
      HAVING SUM(col3)/SUM(col4) < (select AVG(Ratio)
                                    from (SELECT ID, SUM(col3)/SUM(col4) AS Ratio 
                                          FROM table1 
                                          GROUP BY ID
                                         ) as t
                                   )
     )  AS Ratios INNER JOIN
     table2 
     ON Ratios.ID = table2.ID;