我有两张桌子
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.
您可以使用条件和以及使用用户定义变量的排名系统
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)
测试了这个.请找到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)
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和状态