[英]MySQL: How to use MAX function in WHERE clause?
這是我的查詢生成的內容。
LOANTYPE | TOTALBALANCE | STATUS |
--------------------|--------------|--------|
Conventional Loans | 52.84 | Active |
Conforming Loans | 45.55 | Active |
Non-Conforming Loans| 43.90 | Active |
Secured Loans | 42.73 | Active |
Unsecured Loans | 34.99 | Active |
Open-ended Loans | 11.99 | Active |
Close-ended Loans | 11.69 | Active |
TOTALBALANCE
列是每個LOANTYPE
Active 和 Inactive 帳戶的LOANTYPE
。
這是我的查詢
SELECT
product.LOANTYPE,
SUM(account.PRINCIPALBALANCE + account.INTERESTBALANCE) AS TOTALBALANCE,
IF(DATE_ADD(MAX(transaction.PAYMENTDATES),
INTERVAL 6 MONTH) > CURRENT_DATE(),
'Active',
'Innactive') AS LOANSTATUS
FROM
account
INNER JOIN
client ON account.ACCOUNTKEY = client.PRIMARYKEY
INNER JOIN
product ON account.PRODUCTKEY = product.PRIMARYKEY
INNER JOIN
transaction ON transaction.ACCOUNTKEY = loanaccount.PRIMARYKEY
WHERE
transaction.TYPE = 'REPAYMENT'
GROUP BY product.LOANTYPE
我想獲得的TOTALBALANCE
的主動/ Innactive帳戶以及有多少是有效/無效每LOANTYPE
像這樣。
LOANTYPE | ACTIVEBALANCE | ACTIVE# | INACTIVEBALANCE | INNACTIVE#
--------------------|---------------|---------|-----------------|------------
Conventional Loans | 35.23 | 2 | 17.61 | 1
Conforming Loans | 18.22 | 1 | 27.33 | 1
Non-Conforming Loans| 32.486 | 2 | 11.414 | 2
Secured Loans | 17.092 | 2 | 25.638 | 1
Unsecured Loans | 40.61 | 2 | 5.6112 | 1
Open-ended Loans | 7.194 | 1 | 4.796 | 1
Close-ended Loans | 6.4395 | 2 | 5.26 | 2
我加了
AND DATE_ADD(MAX(transaction.PAYMENTDATES),INTERVAL 6 MONTH) > CURRENT_DATE()
在 WHERE 子句中限制結果,但它仍然給我錯誤。
我會/應該在我的查詢中修改什么來實現我的想法。 感謝您的時間。
使用條件聚合。 下面的基本思想是我們使用CASE
表達式有條件地獲取余額總和或記錄計數,具體取決於記錄是被分類為活動還是非活動。
SELECT
product.LOANTYPE,
SUM(CASE WHEN DATE_ADD(t.PAYMENTDATES, INTERVAL 6 MONTH) > CURRENT_DATE()
THEN account.PRINCIPALBALANCE + account.INTERESTBALANCE
ELSE 0 END) AS ACTIVEBALANCE,
COUNT(CASE WHEN DATE_ADD(t.PAYMENTDATES, INTERVAL 6 MONTH) > CURRENT_DATE()
THEN 1 END) AS ACTIVE_CNT,
SUM(CASE WHEN DATE_ADD(t.PAYMENTDATES, INTERVAL 6 MONTH) <= CURRENT_DATE()
THEN account.PRINCIPALBALANCE + account.INTERESTBALANCE
ELSE 0 END) AS INACTIVEBALANCE,
COUNT(CASE WHEN DATE_ADD(t.PAYMENTDATES, INTERVAL 6 MONTH) <= CURRENT_DATE()
THEN 1 END) AS INACTIVE_CNT
FROM account a
INNER JOIN client c
ON a.ACCOUNTKEY = c.PRIMARYKEY
INNER JOIN product p
ON a.PRODUCTKEY = p.PRIMARYKEY
INNER JOIN
(
SELECT ACCOUNTKEY, MAX(PAYMENTDATES) AS PAYMENTDATES
FROM transaction
WHERE TYPE = 'REPAYMENT'
GROUP BY ACCOUNTKEY
) t
ON t.ACCOUNTKEY = a.PRIMARYKEY
GROUP BY
p.LOANTYPE;
請注意,在您的問題中,您引用了一個loanaccount
表,但該表在實際查詢中無處出現。 我假設您打算將其用於引用account
表。
這個怎么樣
SELECT product.loantype,
active.totalbalance AS ACTIVEBALANCE,
active.cnt AS ACTIVE,
incative.totalbalance AS INACTIVEBALANCE,
inactive.cnt AS INACTIVE
FROM product
left join (SELECT product.loantype,
SUM(account.principalbalance
+ account.interestbalance) AS TOTALBALANCE,
COUNT(1) AS cnt
FROM account
inner join client
ON account.accountkey = client.primarykey
inner join product
ON account.productkey = product.primarykey
WHERE TRANSACTION.TYPE = 'REPAYMENT'
AND Current_date() > (SELECT DATE_ADD(MAX(
TRANSACTION.paymentdates),
interval 6 month)
FROM TRANSACTION
WHERE TYPE = 'REPAYMENT'
AND TRANSACTION.accountkey
=
account.accountkey)
GROUP BY product.loantype) AS active
ON( product.loantype = active.loantype )
left join (SELECT product.loantype,
SUM(account.principalbalance
+ account.interestbalance) AS TOTALBALANCE,
COUNT(1) AS cnt
FROM account
inner join client
ON account.accountkey = client.primarykey
inner join product
ON account.productkey = product.primarykey
WHERE TRANSACTION.TYPE = 'REPAYMENT'
AND Current_date() < (SELECT DATE_ADD(MAX(
TRANSACTION.paymentdates),
interval 6 month)
FROM TRANSACTION
WHERE TYPE = 'REPAYMENT'
AND TRANSACTION.accountkey
=
account.accountkey)
GROUP BY product.loantype) AS inactive
ON( product.loantype = inactive.loantype )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.