基于不同标准的内部自连接计数

时间:2015-10-25 20:58:01

标签: mysql join inner-join

我有一个部分看起来像的表:

CustomerID — the key
Employee — the employee that signed up the customer   
StartDate — the date someone became a customer    
Status — the status of the customer, represented by an integer. 

有一个整数,-5,这是“坏”,另外4个整数是“好”的不同阶段。如果他们被证明是欺诈性的,他们会得到-5。

我想要一个返回类似于:

的查询
Employee   |  FRAUDULENT | NOT FRAUDULENT  | TOTAL CUSTOMERS
-------------------------------------------------------------
mshreck            100             37               137
fwmurnau            27             10                37

因此,每一行包含一个特定startDate之后的记录计数,这些记录已被标记为欺诈(具有值-2),而不是欺诈性(除了-2之外的任何一个),两者相同。我希望每个员工都有一排。

现在,我必须运行两个查询并使用Excel将它们连接在一起。我没有在桌子上使用内部连接,但这感觉就像是一个可能的解决方案。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

SELECT   Employee, 
         SUM(CASE WHEN Status = -2 THEN 1 END) AS FRAUDULENT 
         SUM(CASE WHEN Status <> -2 THEN 1 END) AS NOT_FRAUDULENT
         COUNT(*) AS TOTAL_CUSTOMERS
FROM     MyTable
WHERE    StartDate >= :mydate
GROUP BY Employee;

答案 1 :(得分:0)

不,你不需要自己加入,只需使用count()中的sum()进行一些调整来得到数字:

select employee, sum(if(status=-5,1,0)) as fraudulent, sum(if(status<>-5,1,0)) as notfraudulent, count(*) as total
from table group by employee
where stardate>...