我正在尝试创建一个查询,它将在两个单独的列中为我提供两个单独的COUNT。申请计数和已批准申请的计数。我希望在一段时间内每个月显示这些计数。像这样:
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 :(得分: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的相关子查询在我的经验中表现极差。如果可能,请考虑将您的查询转换为仅使用子查询。