MySQL在加入另一个表时从一个表计数

时间:2012-03-23 19:48:16

标签: mysql

我不知道这是一个漫长的一天还是什么,但我无法弄清楚我需要在这里运行的查询。我们有两个表 - 一个用于生成潜在客户,一个用于报告。潜在客户表具有基本的潜在客户信息以及潜在客户的来源(广告系列)。但是,我们需要知道ACCOUNT在日期范围内收到的潜在客户数量。以下是相关的表结构:

client_leads:
id
source
date

client_reports:
account
campaign
date

“来源”列包含与“广告系列”列相同的值。那么,我将如何实现以下目标:

假设潜在客户表中有10个潜在客户,每个潜在客户都有生成潜在客户的广告系列。报告表中有10个帐户,每个帐户都有数百个广告系列。我需要列出每个帐户以及它在潜在客户表中有多少潜在客户。

我无法直接理解逻辑。我已经尝试了所有我能想到的东西,但这对我来说并不合适。如果您需要进一步解释,请告诉我。我试图尽我所能描述这个问题。

修改

CREATE TABLE `client_leads` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `site_id` int(10) DEFAULT NULL,
  `ip` varchar(255) DEFAULT NULL,
  `source` varchar(255) DEFAULT NULL,
  `kw` varchar(255) DEFAULT NULL,
  `adgroup` varchar(255) DEFAULT NULL,
  `time` time DEFAULT NULL,
  `date` date DEFAULT NULL,
  `dayweek` varchar(255) DEFAULT NULL,
  `first_name` varchar(255) DEFAULT NULL,
  `last_name` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  `city` varchar(255) DEFAULT NULL,
  `postal_code` char(5) DEFAULT NULL,
  `state` char(2) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `preferred_phone` varchar(10) DEFAULT NULL,
  `alternate_phone` varchar(10) DEFAULT NULL,
  `level_of_education` varchar(255) DEFAULT NULL,
  `program_of_interest` varchar(255) DEFAULT NULL,
  `organic` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `site_id` (`site_id`),
  KEY `date_indeces` (`time`,`date`,`dayweek`) USING BTREE,
  CONSTRAINT `site_id` FOREIGN KEY (`site_id`) REFERENCES `client_sites` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8


CREATE TABLE `client_reports` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `account` varchar(255) DEFAULT NULL,
  `friendly_name` varchar(255) DEFAULT NULL,
  `sites_id` int(10) DEFAULT NULL,
  `service` varchar(255) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `campaign` varchar(255) DEFAULT NULL,
  `adgroup` varchar(255) DEFAULT NULL,
  `keyword` varchar(255) DEFAULT NULL,
  `impressions` int(10) DEFAULT NULL,
  `clicks` int(10) DEFAULT NULL,
  `cost` float DEFAULT NULL,
  `max_cpc` float DEFAULT NULL,
  `avg_pos` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `stats` (`impressions`,`clicks`,`cost`),
  KEY `date` (`date`),
  KEY `campaign` (`campaign`),
  KEY `adgroup` (`adgroup`),
  KEY `keyword` (`keyword`),
  KEY `service` (`service`),
  KEY `sites_id` (`sites_id`),
  CONSTRAINT `sites_id` FOREIGN KEY (`sites_id`) REFERENCES `client_sites` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=109167 DEFAULT CHARSET=utf8

再次编辑: client_reports表格数据可在http://pastebin.com/T532W3Eq查看 client_leads表格数据可在http://pastebin.com/9cjWEvck

查看

1 个答案:

答案 0 :(得分:2)

SELECT cr.account, cr.campaign, cr.date, COUNT(cl.id) AS number_of_leads
FROM client_reports cr
LEFT JOIN client_leads cl
ON cl.source = cr.campaign
GROUP BY cl.source