2013-05-31 90 views
0

我有2個表,我目前正在使用。客戶表和他們擁有的發薪日貸款表。MySQL查詢來計算查詢中2層深的記錄數

我寫的查詢需要得到客戶的數量與貸款餘額如下:

SELECT * FROM tblcustomer 
WHERE pkcustomerid IN 
    (SELECT fkcustomerid 
    FROM 
     (SELECT * FROM tblloan 
     WHERE outstandingcurrentamount!="NULL") AS T) 

如果他們有一個優秀的量不是NULL或這將返回客戶數據的列表0。現在我需要循環這個結果並對每個客戶執行個別查詢以獲得所有貸款。但我只需要點數。

有沒有辦法以某種方式將額外的列添加到查詢返回的數據,該數據是該客戶的貸款數量?

表結構的相關部分:

CREATE TABLE IF NOT EXISTS `tblcustomer` (
    `pkcustomerid` bigint(20) NOT NULL AUTO_INCREMENT, 
    `fkuserid` int(11) NOT NULL, 
    `fkstoreid` int(11) NOT NULL, 
    `fkcompanyid` int(11) NOT NULL, 
    `fkstaticid` varchar(255) NOT NULL, 
    ...snip... 
    PRIMARY KEY (`pkcustomerid`,`fkcountryid`,`fkcityid`,`fkstateid`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=821 ; 


CREATE TABLE IF NOT EXISTS `tblloan` (
    `pkloanid` int(11) NOT NULL AUTO_INCREMENT, 
    `fkuserid` int(11) NOT NULL, 
    `fkcustomerid` int(11) NOT NULL, 
    `fkstoreid` int(11) NOT NULL, 
    `outstandingcurrentamount` double NOT NULL 
    ...snip... 
    PRIMARY KEY (`pkloanid`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1567 ; 
+2

您實際上並沒有將關鍵字'NULL'作爲字符串存儲在'outstandingcurrentamount'(否則將是數字?)列中,是嗎? –

+0

請爲這兩個表中的每一個發佈「CREATE TABLE」語句。 –

+0

沒有它的數據庫分配的默認NULL。但出於某種原因,執行outstandingcurrentamount> = 0將返回所有記錄 – user1992522

回答

2

的該行數=組合的總數嘗試

SELECT t.*, q.loan_count 
    FROM tblcustomer t JOIN 
(
SELECT c.pkcustomerid, COUNT(*) loan_count 
    FROM tblcustomer c LEFT JOIN tblloan l 
    ON c.pkcustomerid = l. fkcustomerid 
    WHERE l.outstandingcurrentamount IS NOT NULL 
    AND l.outstandingcurrentamount > 0 
    GROUP BY c.pkcustomerid 
) q ON t.pkcustomerid = q.pkcustomerid 
+0

之前子查詢的目的是什麼?爲什麼不直接運行子查詢並從中選擇想要的列? –

+1

@PugganSe目的是讓'tblcustomer'中的所有列不屬於「GROUP BY」的一部分,這是「普通」RDBMSes(Oracle,SQL Server)所不允許的。雖然它在MySql中是允許的,但它不是一個好主意,因爲從理論上講,無法分辨組中哪個值爲每個這樣的列獲取。另一種方法是在這樣的列上使用集合函數'MIN(),MAX()...'。 – peterm

+0

感謝您的信息,我自己只使用mysql,因此只知道mysql可以做什麼,但總是很高興能夠更好地瞭解其他人 –

1

通過使用JOIN代替子查詢,你可以從所有的表中選擇的東西, 然後用GROUP BY讓每個客戶一行,並使用COUNT(*)計數貸款

SELECT COUNT(*), tblcustomer.* 
FROM tblloan 
LEFT JOIN tblcustomer ON (tblloan.fkcustomerid = tblcustomer.pkcustomerid) 
WHERE tblloan.outstandingcurrentamount IS NOT NULL 
GROUP BY tblcustomer.pkcustomerid; 
+0

語法錯誤(對不起,我不知道MySQL的最好的sytax)。左加入(tblloan.fkcustomerid = tblcustomer.pkcustomerid) – user1992522

+0

和+1不是NULL' – rinchik

+0

對不起,表名應該在 –