2014-02-23 61 views
1

我是SQL新手,我試圖在訪問中構建查詢。我需要選擇比平均比率小的兩列比例。 我能夠首先對數據進行分組,以便能夠獲得每列的總數。我還能夠獲得以下(查詢其作品),每組比例:如何在內部查詢的外部查詢中執行算術運算

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) 

誰能幫我看看有什麼我做錯了,我一直在這几几小時,老實說,我在這裏虧本。

回答

1

這是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; 
+0

謝謝戈登,它做到了!我可以使用HAVING子句來構建這個查詢嗎?再次感謝! – user3344252