2014-02-10 69 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的相关子查询在我的经验中表现极差。如果可能的话,请考虑将查询转换为只是子查询。