SQL选择总计并拆分成功并失败

mar*_*rse 22 mysql sql

我有两张桌子

Table 1                Table 2                   
|leadid|Location|      |leadid|leadstatus|       
|---------------|      |-----------------|
|1     |Japan   |      |1     | Hired    |
|2     |China   |      |2     | Failed   |
|3     |Korea   |      |3     | Hired    |
|4     |Japan   |      |4     | Hired    |
|5     |Japan   |      |5     | Hired    |
Run Code Online (Sandbox Code Playgroud)

我的目标是计算每个国家的访谈次数,并计算每个国家的招聘人数和失败人数.结果表应该是这样的

|Location|Interview|Hired|Failed|
|-------------------------------|
|Japan   | 3       |3    |0     |
|Korea   | 1       |1    |0     |
|China   | 1       |0    |1     |
Run Code Online (Sandbox Code Playgroud)

我已经完成了每个国家的访谈计数.我的问题是我无法计算每个国家的招聘人数和失败人数.这是我目前的MySQL代码:

SELECT Location, count(*) as Interview 
FROM table1 
GROUP BY Location 
ORDER BY Interview DESC
Run Code Online (Sandbox Code Playgroud)

Fra*_*erZ 19

这应该适合你:

SELECT Location, COUNT(*) as Interview,
SUM(CASE WHEN leadstatus = 'Hired' THEN 1 ELSE 0 END) as Hired,
SUM(CASE WHEN leadstatus = 'Failed' THEN 1 ELSE 0 END) as Failed
FROM table1 
LEFT JOIN table2 ON table1.leadid = table2.leadid
            GROUP BY Location 
            ORDER BY Interview DESC
Run Code Online (Sandbox Code Playgroud)

是一个工作的sqlfiddle.


Abh*_*rty 9

您可以使用条件和以及使用用户定义变量的排名系统

select
@rn:=@rn+1 as rank, 
location,
interview,
hired,
failed
from(
    select 
        t1.location, 
        count(*) as interview,
        sum(t2.leadstatus='Hired') as hired,
        sum(t2.leadstatus='Failed') as failed
        from table1 t1
        join table2 t2 on t1.leadid = t2.leadid 
        group by t1.location
        order by interview desc
)x,(select @rn:=0)y 
order by rank ;
Run Code Online (Sandbox Code Playgroud)


kam*_*bar 6

测试了这个.请找到SQL FIDDLE LINK

SELECT 

    t1.leadid, 
    t1.Location, 
    count( t2.leadstatus ) Location, 
    count(case when t2.leadstatus = 'Hired' then t2.leadstatus end) as Hired, 
    count(case when t2.leadstatus = 'Failed' then t2.leadstatus end) as Failed  

FROM table1 AS t1 
    INNER JOIN table2 AS t2  
    ON t1.leadid = t2.leadid 

GROUP BY t1.Location,t2.leadstatus 
Order BY Hired DESC
Run Code Online (Sandbox Code Playgroud)

小提琴


Sha*_*hal 5

Select location,count(*) as Interview,
SUM(CASE WHEN (status='Hired')Then 1 Else 0 END) as Hired,
SUM(CASE WHEN(status='Failed') Then 1 Else 0 END) as Failed 
from loc inner join status on loc.leadid= status.leadid 
group by location;
Run Code Online (Sandbox Code Playgroud)

其中第一表LOC方含leadid位置,第二个表是状态含有leadid状态