2014-02-10 122 views
0

我想創建一個查詢,它將在兩個單獨的列中提供兩個單獨的COUNT。計算應用程序數量並覈准應用程序計數。我希望在一段時間內顯示每個月的這些計數。像這樣:多個GROUP BY與子查詢

date  applications approvals 
January 20   3  
February 25   1 
March  20   4 
April  10   2 

當使用子查詢,使用 「GROUP BY MONTH(APPL_CREATE_DT)」 我分組主查詢。但是,這個問題的問題是,它只能正確分組第一列,而下一列包含每個月的相同計數。如果我將相同的GROUP BY添加到其他子查詢部分,則會出現1242錯誤。

有關如何解決這個問題的任何想法都會有所幫助。我已經看到過類似的其他問題,但是他們並沒有太依賴其他解決方案的條款。

SELECT 
COUNT(DISTINCT APPL_ID) AS Applications, 
(SELECT COUNT(DISTINCT APPL_ID) 
FROM APPL_APP 
JOIN APPU_APP_USER ON APPL_ID = APPU_APPL_ID 
LEFT JOIN APPD_APP_DECISION ON APPD_APPL_ID = APPL_ID 
WHERE APPD_STATUS = 'LENDER_APPROVED' 
    AND APPU_CUR_STATE = 'TX' 
    AND APPL_CREATE_DT >= '2013-01-01 00:00:00' 
    AND APPL_CREATE_DT <= '2014-01-31 23:59:59' 
GROUP BY MONTH(APPL_CREATE_DT)) AS Approvals 
FROM APPU_APP_USER 
JOIN APPL_APP ON APPL_ID = APPU_APPL_ID 
AND APPL_CREATE_DT >= '2013-01-01 00:00:00' 
AND APPL_CREATE_DT <= '2014-01-31 23:59:59' 
AND APPU_CUR_STATE = 'TX' 
GROUP BY MONTH(APPL_CREATE_DT); 
+0

在您的子查詢中,只選擇MONTH()與外部查詢的MONTH()匹配的行:即您在 –

+0

上分組的那個行仍然獲得相同的錯誤。我曾經查找過像MONTH(outerTable.APPL_CREATE_DATE)= MONTH(inner_table.APPL_CREATE_DATE)之類的東西,但我不知道將它放在哪裏才能使其工作。 – user2356890

+0

問這些問題的一個好方法是創建一個SqlFiddle並允許人們爲你更改它。看看這個例子:http://sqlfiddle.com/#!9/1e85d/5 另外,如果你可以重新將你的查詢重新定義爲count(*),你或許可以採用不同的方式,但這取決於基數App,AppUser和AppDecision之間的關係。 –

回答

0

爲了簡單起見,我已經刪除了一些條件。

至於你提到

我擡頭做這樣的事情MONTH(outerTable.APPL_CREATE_DATE)= MONTH(inner_table.APPL_CREATE_DATE)

你說得對。

,但我不知道在哪裏把它做

我希望下面的查詢會幫助你它的工作。

SELECT 
    COUNT(DISTINCT APPL_ID) AS Applications, 
    (
     SELECT COUNT(DISTINCT APPL_ID) 
     FROM APPL_APP INNER JOIN APPU_APP_USER ON APPL_ID = APPU_APPL_ID 
      LEFT JOIN APPD_APP_DECISION ON APPD_APPL_ID = APPL_ID 
     WHERE APPD_STATUS = 'LENDER_APPROVED' 
      AND MONTH(APPL_CREATE_DT) = MONTH(t1.APPL_CREATE_DT) 
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^= This condition added 
     GROUP BY MONTH(APPL_CREATE_DT) 
    ) AS Approvals 
FROM APPL_APP t1 INNER JOIN APPU_APP_USER ON APPL_ID = APPU_APPL_ID 
       ^^===== Alias added 
GROUP BY MONTH(APPL_CREATE_DT); 

請注意,MySQL的相關子查詢在我的經驗中表現極差。如果可能的話,請考慮將查詢轉換爲只是子查詢。