2012-03-20 270 views
1

我需要做一个列表与扫描的大多数事情,公司...我有两个表,ExhibitorsLeads如何使用LEFT JOIN进行计数?

Leads包含每一个参展商做每个“动作”。有时,在Exhibitors表中,同一公司有两个帐户。例如,PepsiCO可能有两个账户。

连接两者的键/列被称为ExhibitorID

我需要检索前导数最多的20个(所以COUNT(*)在leads),但我需要按公司Exhibitors表进行分组。

Curerntly我使用这个:

SELECT t2.ExhibitorID, t2.Company, t2.Username, t1.Count 
     FROM exhibitors AS t2 
     , (SELECT ExhibitorID, COUNT(*) AS Count 
       FROM leads AS l 
       WHERE l.ContractorID = 100 
       AND l.ShowID = "20120228AB" 
       GROUP BY l.ExhibitorID 
       ORDER BY COUNT(*) DESC 
       LIMIT 20) AS t1 
    WHERE t2.ExhibitorID = t1.ExhibitorID 
    ORDER BY t1.Count DESC 

但它没有按公司。感谢你的帮助。

+2

首先,我会更改您的查询以使用正确的ANSI JOIN语法。 INNER/LEFT/RIGHT JOIN – Taryn 2012-03-20 15:56:59

+0

此外,我不认为你想要一个'LEFT JOIN',因为你会得到零头数(或参展商),这将不计算在内。我认为你正在寻找'INNER JOIN' – swasheck 2012-03-20 16:05:34

+0

@swasheck除非公司有可能有0个相关的线索,并且他想要得到该公司返回的0个点数......在这种情况下,他会想要一个“左边join'。 – 2012-03-20 16:07:35

回答

2
SELECT 
    e.Company, 
    COUNT(l.LeadId) AS Actions 
FROM 
    Exhibitors AS e 
    LEFT JOIN Leads AS l 
     ON l.ExhibitorID = e.ExhibitorID 
     AND l.ContractorID = 100 
     AND l.ShowID = "20120228AB" 
GROUP BY e.Company 
ORDER BY Actions DESC 
LIMIT 20; 
+0

不错的查询,但'LEFT JOIN'将返回NULL值来表示'Exhibitors'的不匹配值。 MySql会忽略集合函数的NULL值,但我认为'INNER JOIN'在这里更合适。 – swasheck 2012-03-20 16:07:37

+0

@swasheck如果参展商没有匹配的线索怎么办?我认为他希望在这种情况下计入0,而不是从结果集中省略参展商。 – 2012-03-20 16:09:05

+0

是的。往上看。 :) – swasheck 2012-03-20 16:09:31

3
select e.exhibitorid, count(l.leadid) 
    from leads l 
     inner join exhibitors on e.exhibitorid = l.exhibitorid 
     and l.showid = "20120228AB" and l.contractorid = 100 
    group by e.exhibitorid 
    order by count(l.contractorid) DESC 
    limit 20; 

如果有关系,这将仍然只是如果你想联系返回前20名,所以那时就似乎是一个MySQL的解决办法在这里MySQL's alternative to T-SQL's WITH TIES

0

你可以组公司,并加入参展商代码:

select e.Company 
,  count(distinct l.LeadID) as LeadCount 
from Exhibitors e 
join Leads l 
on  l.ExhibitorID = e.ExhibitorID 
     and l.ShowID = "20120228AB" 
     and l.ContractorID = 100 
group by 
     e.Company 
order by 
     LeadCount DESC 
limit 20