0

現在使用しているテーブルが 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 ;
4

2 に答える 2

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
于 2013-05-31T20:12:58.493 に答える
1

サブクエリの代わりに JOIN を使用すると、すべてのテーブルからものを選択し、GROUP BY顧客ごとに 1 つの行を取得するために使用COUNT(*)し、その行の組み合わせの総数 = ローンの数をカウントするために使用できます。

SELECT COUNT(*), tblcustomer.*
FROM tblloan 
LEFT JOIN tblcustomer ON (tblloan.fkcustomerid = tblcustomer.pkcustomerid) 
WHERE tblloan.outstandingcurrentamount IS NOT NULL
GROUP BY tblcustomer.pkcustomerid;
于 2013-05-31T20:10:58.507 に答える