MySQL 查询计算查询中 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 ;

最佳答案

尝试

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

关于MySQL 查询计算查询中 2 层深处的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16865061/

相关文章:

php - 从mysql的mediumtext字段中提取一部分文本,用php制作turn.js书页

mysql - 如何将 MATLAB 连接到 mysql?

mysql - 如何通过 api/SDK 对 cloudbees mysql 数据库进行快照?

javascript - 405 未找到方法。在本地主机上

mysql - 在 INSERT 查询中传递列

java - 从java servlet以正确的格式将数据插入到mysql表中

ALTER TABLE 中的 MySQL 语法错误

python - MySQL在Python中整理utf8风格的字符串比较

php - 显示在底部的查询中的子查询结果

php - sql使用偏移行获取没有足够的结果