我的查询初始化用户。从那里它抓住了用户完成的所有活动。我收回一些数据,然后我还要加入销售。我编写了一个子查询来获取销售结果,但是,销售与用户无关,因此我需要获取account_id为用户活动已完成的所有销售。
此查询有效,但速度非常慢。当我执行s.account_id IN(activity.account_id)时,它不会带回正确的数字。
select t.name as team, u.name as "REP NAME",
count(distinct (case when activity.tag='visit' then activity.id
end)) as "TOTAL VISITS",
count(distinct (case when activity.tag='visit' then
activity.account_id end)) as "UNIQUE VISITS",
ROUND((select sum(s.volumece) from lpmysqldb.sales s where
s.org_id='555b918ae4b07b6ac5050852'
and s.account_id IN (select
account_id from lpmysqldb.activity where
org_id='555b918ae4b07b6ac5050852' and user_id=u.id and
(completed_at between '2018-04-01' and '2018-04-04') and
tag='visit' and accountname is not null and (status='active' or
status='true' or status='1'))
and (s.invoice_date between
DATE_FORMAT(CURDATE(), '%Y-01-01') and DATE_FORMAT(CURDATE(), '%Y-
%m-%d'))),2) as "CURRENT YEAR VOLUME"
from lpmysqldb.users u
left join lpmysqldb.teams t on t.team_id=u.team_id
left join lpmysqldb.activity activity on
activity.org_id='555b918ae4b07b6ac5050852' and activity.user_id=u.id
and (activity.completed_at between '2018-04-01' and '2018-04-04')
and activity.accountname is not null and (activity.status IN
('1','active','true','') OR activity.status IS NULL)
where u.org_id='555b918ae4b07b6ac5050852'
and u.status IN ('active','true','1')
and istestuser!='1'
group by u.org_id, t.name, u.id, u.name
为了方便观看,我把这件作品隔开了。 我不是这里的专家,所以任何帮助都会受到赞赏!
我相信这是答案(似乎工作得更快)
ROUND((select sum(s.volumece)
from lpmysqldb.sales s
INNER JOIN ( select *
from lpmysqldb.activity
where org_id='555b918ae4b07b6ac5050852'
and (completed_at between '2018-04-01' and '2018-04-
04')
and tag='visit'
and accountname is not null
and (status='active' or status='true' or status='1'))
T on T.account_id = s.account_id
where s.org_id='555b918ae4b07b6ac5050852'
and T.user_id=u.id
and (s.invoice_date between DATE_FORMAT(CURDATE(), '%Y-01-01') and
DATE_FORMAT(CURDATE(), '%Y-%m-%d'))
),2) as "CURRENT YEAR VOLUME",
答案 0 :(得分:0)
你可以简单地使用内连接来避免IN子句,例如:
select t.name as team, u.name as "REP NAME",
count(distinct (case when activity.tag='visit' then activity.id
end)) as "TOTAL VISITS",
count(distinct (case when activity.tag='visit' then
activity.account_id end)) as "UNIQUE VISITS",
ROUND((
select sum(s.volumece)
from lpmysqldb.sales s
INNER JOIN (select
account_id from lpmysqldb.activity where
org_id='555b918ae4b07b6ac5050852' and user_id=u.id and
(completed_at between '2018-04-01' and '2018-04-04') and
tag='visit' and accountname is not null and (status='active' or
status='true' or status='1')) T on T.account_id = s.account_id
where s.org_id='555b918ae4b07b6ac5050852'
and (s.invoice_date between
DATE_FORMAT(CURDATE(), '%Y-01-01') and DATE_FORMAT(CURDATE(), '%Y-
%m-%d'))),2) as "CURRENT YEAR VOLUME"
from lpmysqldb.users u
left join lpmysqldb.teams t on t.team_id=u.team_id
left join lpmysqldb.activity activity on
activity.org_id='555b918ae4b07b6ac5050852' and activity.user_id=u.id
and (activity.completed_at between '2018-04-01' and '2018-04-04')
and activity.accountname is not null and (activity.status IN
('1','active','true','') OR activity.status IS NULL)
where u.org_id='555b918ae4b07b6ac5050852'
and u.status IN ('active','true','1')
and istestuser!='1'
group by u.org_id, t.name, u.id, u.name