Mysql 在1个查询中使用联接的多个和
我使用的这个查询有很多问题。它似乎没有正确地计算行数,而且遗漏了很多 基本上,我这里有两张桌子。一个用于潜在客户,另一个用于任务。每个潜在客户可以分配多次,因此在分配表中可以有多行。dealerships表只是用来确保它不计算某些经销商的行数 我想在这里做的就是计算来自每个网站的潜在客户数量,并按天、周、月等进行细分 以下是查询中使用的每个表的结构:Mysql 在1个查询中使用联接的多个和,mysql,count,sum,Mysql,Count,Sum,我使用的这个查询有很多问题。它似乎没有正确地计算行数,而且遗漏了很多 基本上,我这里有两张桌子。一个用于潜在客户,另一个用于任务。每个潜在客户可以分配多次,因此在分配表中可以有多行。dealerships表只是用来确保它不计算某些经销商的行数 我想在这里做的就是计算来自每个网站的潜在客户数量,并按天、周、月等进行细分 以下是查询中使用的每个表的结构: -- -- Table structure for table `assignments` -- CREATE TABLE `assignmen
--
-- Table structure for table `assignments`
--
CREATE TABLE `assignments` (
`id` int(11) NOT NULL auto_increment,
`id_dealership` int(11) NOT NULL,
`id_lead` int(11) NOT NULL,
`date_assigned` int(11) NOT NULL,
`website` varchar(255) NOT NULL default '',
`make` varchar(255) NOT NULL default '',
`model` varchar(255) NOT NULL default '',
`ip_address` varchar(255) NOT NULL default '',
`is_reassign` varchar(255) NOT NULL default 'no',
`manual_or_auto` varchar(255) NOT NULL default 'N/A',
`assigned_by` varchar(255) NOT NULL default 'N/A',
PRIMARY KEY (`id`),
KEY `id_dealership` (`id_dealership`),
KEY `date_assigned` (`date_assigned`),
KEY `id_lead` (`id_lead`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=26987 ;
--
-- Table structure for table `dealerships`
--
CREATE TABLE `dealerships` (
`id` int(11) NOT NULL auto_increment,
`province` varchar(255) NOT NULL default '',
`city` varchar(255) NOT NULL default '',
`name` varchar(255) NOT NULL,
`email` text NOT NULL,
`email_subject` varchar(255) NOT NULL default 'Car Lead',
`type` varchar(255) NOT NULL,
`make` varchar(255) NOT NULL,
`leads` int(11) NOT NULL default '0',
`status` varchar(255) NOT NULL,
`low_notif` int(11) NOT NULL,
`reassign_id` int(11) NOT NULL,
`reassign_days` int(11) NOT NULL,
`salesman` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=190 ;
--
-- Table structure for table `leads`
--
CREATE TABLE `leads` (
`id` int(11) NOT NULL auto_increment,
`id_inf` int(11) NOT NULL,
`name_first` varchar(255) NOT NULL,
`name_last` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`phone_home` varchar(255) NOT NULL,
`phone_cell` varchar(255) NOT NULL,
`phone_work` varchar(255) NOT NULL,
`postcode` varchar(255) NOT NULL,
`website` varchar(255) NOT NULL,
`address` varchar(255) NOT NULL,
`province` varchar(255) NOT NULL,
`employer` varchar(255) NOT NULL,
`city` varchar(255) NOT NULL,
`rentorown` varchar(255) NOT NULL,
`emp_months` varchar(255) NOT NULL,
`emp_years` varchar(255) NOT NULL,
`sin` varchar(255) NOT NULL,
`occupation` varchar(255) NOT NULL,
`monthly_income` varchar(255) NOT NULL,
`bankruptcy` varchar(255) NOT NULL,
`tradein` varchar(255) NOT NULL,
`cosign` varchar(255) NOT NULL,
`monthly_payment` varchar(255) NOT NULL,
`residence_years` varchar(255) NOT NULL,
`residence_months` varchar(255) NOT NULL,
`birthday` varchar(255) NOT NULL,
`make` varchar(255) NOT NULL,
`model` varchar(255) NOT NULL,
`date_added` int(11) NOT NULL,
`ip_address` varchar(255) NOT NULL default '',
`time_to_call` varchar(255) NOT NULL,
`referrer` varchar(255) NOT NULL default '',
`source` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `id_infusionsoft` (`id_infusionsoft`),
KEY `date_added` (`date_added`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=22488 ;
以下是我正在使用的查询:
select
l.website,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m-%d') = date_format(now(), '%Y-%m-%d') then 1 else 0 end) AS c_day,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m-%d') = date_format(now() - interval 1 day, '%Y-%m-%d') then 1 else 0 end) AS c_yesterday,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m-%d') = date_format(now() - interval 2 day, '%Y-%m-%d') then 1 else 0 end) AS c_2_days,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m-%d') = date_format(now() - interval 3 day, '%Y-%m-%d') then 1 else 0 end) AS c_3_days,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m-%d') = date_format(now() - interval 4 day, '%Y-%m-%d') then 1 else 0 end) AS c_4_days,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m-%d') = date_format(now() - interval 5 day, '%Y-%m-%d') then 1 else 0 end) AS c_5_days,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m-%d') = date_format(now() - interval 6 day, '%Y-%m-%d') then 1 else 0 end) AS c_6_days,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m-%d') = date_format(now() - interval 7 day, '%Y-%m-%d') then 1 else 0 end) AS c_7_days,
sum(case when YEARWEEK(FROM_UNIXTIME(COALESCE(a.date_assigned, l.date_added))) = YEARWEEK(CURDATE()) then 1 else 0 end) AS c_week,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m')= date_format(now(), '%Y-%m') then 1 else 0 end) AS c_month,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m')= date_format(now() - interval 1 month, '%Y-%m') then 1 else 0 end) AS c_last_month,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m')= date_format(now() - interval 2 month, '%Y-%m') then 1 else 0 end) AS c_2_months,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m')= date_format(now() - interval 3 month, '%Y-%m') then 1 else 0 end) AS c_3_months,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m')= date_format(now() - interval 4 month, '%Y-%m') then 1 else 0 end) AS c_4_months,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m')= date_format(now() - interval 5 month, '%Y-%m') then 1 else 0 end) AS c_5_months,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y-%m')= date_format(now() - interval 6 month, '%Y-%m') then 1 else 0 end) AS c_6_months,
sum(case when date_format(from_unixtime(COALESCE(a.date_assigned, l.date_added)), '%Y')= date_format(now(), '%Y') then 1 else 0 end) AS c_year
from `leads` as l
left join `assignments` as a on (a.id_lead = l.id)
left join `dealerships` as d on (d.id = a.id_dealership)
where a.is_reassign='no' and a.id_dealership not in ('65', '77', '89', '138', '175', '177')
group by l.website
order by l.website asc
需要注意的一点是,有时潜在客户的lead表中缺少date_added字段,但是潜在客户的分配会出现date_assigned字段,反之亦然
为什么我的查询不能正常工作?任何帮助都将不胜感激。您正在将按日期聚合的操作与数据透视的操作相结合。也许您应该先调试聚合,然后再调试pivot。我想你在计算sumcase表达式中的行数。经常计算左边的行会导致计算过多。这里有一些关于按日期聚合的信息。你能给我一个你将如何编写这个查询的例子吗?