mysql中一条sql语句中使用多个count关联查询多张表

 

在给公司写代码的过程中忽然发现在sql语句中碰到一些小问题,虽然最终自己解决了,但是不得不说好不容易啊,故写此博客提醒自己,以免日后再在此处浪费时间。

需求:

有两张表,分别是marketChannelInfo表和marketDatasourceInfo表,

两张表的字段分别为:

 

 
  1. CREATE TABLE `marketChannelInfo` (

  2. `id` int(11) NOT NULL AUTO_INCREMENT,

  3. `channelName` varchar(40) NOT NULL DEFAULT '' COMMENT '渠道名称',

  4. `channelURL` varchar(100) NOT NULL DEFAULT '' COMMENT '渠道推广链接',

  5. `channelType` tinyint(1) NOT NULL DEFAULT '0' COMMENT '渠道推广类型 1: h5 2 其他',

  6. `createTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

  7. `updateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

  8. `createBy` int(11) NOT NULL DEFAULT '0' COMMENT '创建人',

  9. `updateBy` int(11) NOT NULL DEFAULT '0' COMMENT '更新人',

  10. `version` smallint(6) NOT NULL DEFAULT '1' COMMENT '数据版本号',

  11. `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记',

  12. PRIMARY KEY (`id`)

  13. ) ENGINE=InnoDB AUTO_INCREMENT=3938 DEFAULT CHARSET=utf8 COMMENT='市场推广渠道信息表'

 

 

 
  1. CREATE TABLE `marketDatasourceInfo` (

  2. `id` int(11) NOT NULL AUTO_INCREMENT,

  3. `dataType` tinyint(1) NOT NULL DEFAULT '0' COMMENT '数据类型 1:登录(引入用户) 2: 进件(引入进件) ',

  4. `channel` varchar(40) NOT NULL DEFAULT '' COMMENT '渠道名称',

  5. `dataValue` varchar(40) NOT NULL DEFAULT '' COMMENT '渠道名称',

  6. `dataTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据进入系统时间',

  7. `createTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

  8. PRIMARY KEY (`id`),

  9. UNIQUE KEY `uniq_dataValue` (`dataValue`)

  10. ) ENGINE=InnoDB AUTO_INCREMENT=109851 DEFAULT CHARSET=utf8 COMMENT='市场数据引流信息表'

现在需要根据marketDatasourceInfo表查询出marketChannelInfo表内对应渠道的注册用户人数以及对应的借款人数

即显示如下数据

 

因为逻辑设计的缘故,代码中根据链接注册的用户在注册之后进行借贷,则之前在marketDatasourceInfo表内的信息会被会被借款信息所取代,即dataType会由1变成2,故实际的用户注册是包含借贷用户的。借贷人数则是指dataType为2的。

 

 

查询语句如下:

 

 
  1. SELECT mci.channelName,mci.channelURL,mci.channelType,COUNT(1) AS userCount ,(SELECT COUNT(1) FROM marketDatasourceInfo mdi WHERE mdi.`dataType`= 2 AND mdi.channel=mci.channelName) AS loanCount

  2. FROM marketChannelInfo mci LEFT JOIN marketDatasourceInfo mdi ON mci.channelName=mdi.channel GROUP BY mci.channelName ORDER BY mci.createTime DESC LIMIT 0,10


注意点:

1.group by

2.(SELECT COUNT(1) FROM marketDatasourceInfo mdi  WHERE mdi.`dataType`= 2 AND mdi.channel=mci.channelName) AS loanCount

 

参考链接:https://blog.csdn.net/gwd1154978352/article/details/78606888

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那些年的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值