当我运行查询时,它只通过计算一行中的所有记录来提供一条记录,它应该针对每个a.tech_id
输出记录。为什么我加入不工作?
select
concat(u.first_name, ' ', u.last_name) as name,
u.skill,
ut.name as team_name,
(count(if(a.tech_id = u.user_id AND a.qc_id = 0 AND a.status = 2,1,0))) AS assigned_scopes,
(count(if(a.tech_id = u.user_id AND a.qc_id > 0 AND a.status = 3,1,0))) AS assigned_qa,
(count(if(a.assignment_id=o.assignment_id and a.tech_id = u.user_id AND a.status = 2 AND a.qc_id = 0 and o.class_id= 3,1,0))) AS assigned_canvass,
from am_ts_order o
left join am_ts_assignment a
ON a.assignment_id=o.assignment_id
left join am_user u
ON a.tech_id=u.user_id
left join user_team ut
ON u.user_team_id = ut.user_team_id
where u.user_role_id = 15
and u.user_team_id = ut.user_team_id
order by u.first_name asc
答案 0 :(得分:1)
使用count,sum等函数时,需要添加group by子句来控制结果的分组:
select
concat(u.first_name, ' ', u.last_name) as name,
u.skill,
ut.name as team_name,
(count(if(a.tech_id = u.user_id AND a.qc_id = 0 AND a.status = 2,1,0))) AS assigned_scopes,
(count(if(a.tech_id = u.user_id AND a.qc_id > 0 AND a.status = 3,1,0))) AS assigned_qa,
(count(if(a.assignment_id=o.assignment_id and a.tech_id = u.user_id AND a.status = 2 AND a.qc_id = 0 and o.class_id= 3,1,0))) AS assigned_canvass,
from am_ts_order o
left join am_ts_assignment a
ON a.assignment_id=o.assignment_id
left join am_user u
ON a.tech_id=u.user_id
left join user_team ut
ON u.user_team_id = ut.user_team_id
where u.user_role_id = 15
and u.user_team_id = ut.user_team_id
order by u.first_name asc
group by a.tech_id
<强>更新强>
此查询会更改IF条件,以测试是否在某些左连接表中找到匹配的行:
select
concat(u.first_name, ' ', u.last_name) as name,
u.skill,
ut.name as team_name,
count(if(
(NOT a.tech_id IS NULL) AND
(NOT u.user_id IS NULL) AND
a.qc_id = 0 AND
a.status = 2,1,0)) AS assigned_scopes,
count(if(
(NOT a.tech_id IS NULL) AND
a.qc_id > 0 AND
a.status = 3,1,0)) AS assigned_qa,
count(if(
(NOT a.assignment_id IS NULL) AND
a.assignment_id = o.assignment_id AND
a.tech_id = u.user_id AND
a.status = 2 AND
a.qc_id = 0 AND
o.class_id= 3,1,0)) AS assigned_canvass,
from am_ts_order o
left join am_ts_assignment a
ON a.assignment_id=o.assignment_id
left join am_user u
ON a.tech_id=u.user_id
left join user_team ut
ON u.user_team_id = ut.user_team_id
where u.user_role_id = 15
and u.user_team_id = ut.user_team_id
order by u.first_name asc
group by a.tech_id