需要在一个中加入3个sql请求

时间:2016-05-11 11:02:16

标签: mysql sql count request

我有3个请求可以帮助我形成报告并单独工作。关键是他们只是用不同的参数给出了同一主题的信息,我觉得它们可以结合在一起。因此,我会得到包含4列的1个报告:promotertotal_regisrtationswith_photowithout_photo

我尝试以不同的方式加入它们,但仍无法让它运行:(

怎么做?

//总体报告

SELECT user.created_by AS promoter, COUNT( * ) as total_registrations
FROM user
JOIN project ON user.id = project.client_id
JOIN task ON project.id = task.project_id
WHERE task.type =  'registration'
AND (
user.created_by =414
OR user.created_by =415
OR user.created_by =488
)
GROUP BY user.created_by

//带照片

SELECT COUNT( * ) AS with_photo
FROM user
JOIN project ON user.id = project.client_id
JOIN task ON project.id = task.project_id
WHERE task.type =  'registration'
AND (
task.status =  'request'
OR task.status =  'validated'
)
AND (
user.created_by =414
OR user.created_by =415
OR user.created_by =488
)
GROUP BY user.created_by

//没有照片

SELECT COUNT( * ) AS without_photo
FROM user
JOIN project ON user.id = project.client_id
JOIN task ON project.id = task.project_id
WHERE task.type =  'registration'
AND task.status =  'new'
AND (
user.created_by =414
OR user.created_by =415
OR user.created_by =488
)
GROUP BY user.created_by

1 个答案:

答案 0 :(得分:0)

使用CASE表达式。

<强>查询

SELECT user.created_by AS promoter, 
COUNT(*) as total_registrations,
SUM(CASE WHEN task.status IN ('request', 'validated') THEN 1 END) AS with_photo,
SUM(CASE task.status WHEN 'new' THEN 1 END) AS without_photo
FROM user
JOIN project ON user.id = project.client_id
JOIN task ON project.id = task.project_id
WHERE task.type =  'registration'
AND(
    user.created_by =414
    OR user.created_by =415
    OR user.created_by =488
)
GROUP BY user.created_by;