2013-07-31 3 views
2

저는 SQL/MySQL과 Stackoverflow에 관해서 매우 신중하며, 을 통해 쿼리를 작성하려고합니다. iReport (비록 내가 사용할 필요가 없지만 iReport) SugarCRM CE. 필요한 것은 특정 "사용자"(직원)와 연결된 "추천", "음성 메일", "전자 메일"및 "Call_ins"의 수를 표시하는 보고서를 작성하는 것입니다. 현재 내가 설정 한 쿼리가 작동합니다. 그러나 데이터를 여러 번 실행하여 200 개 이상의 페이지를 생성합니다. 현재 사용중인 코드는 다음과 같습니다.사용자 ID를 기반으로 발생 횟수를 카운트하십시오

SELECT 
(SELECT COUNT(*) FROM `leads` INNER JOIN `leads_cstm` ON `leads`.`id` = `leads_cstm`.`id_c` WHERE (leadtype_c = 'Referral' AND users.`id` = leads.`assigned_user_id`)), 
(SELECT COUNT(*) FROM `leads` INNER JOIN `leads_cstm` ON `leads`.`id` = `leads_cstm`.`id_c` WHERE (leadtype_c = 'VM' AND users.`id` = leads.`assigned_user_id`)), 
(SELECT COUNT(*) FROM `leads` INNER JOIN `leads_cstm` ON `leads`.`id` = `leads_cstm`.`id_c` WHERE (leadtype_c = 'Email' AND users.`id` = leads.`assigned_user_id`)), 
users.`first_name`,users.`last_name` 
FROM 
`users` users, 
`leads` leads 

나는 어떤 지침을 부탁드립니다!

답변

2

조건부 합계를 사용하려고합니다.

SELECT sum(leadtype_c = 'Referral') as Referrals, 
     sum(leadtype_c = 'VM') as VMs, 
     sum(leadtype_c = 'Email') as Emails, 
     users.`first_name`, users.`last_name` 
FROM users join 
    `leads` 
    on users.`id` = leads.`assigned_user_id` INNER JOIN 
    `leads_cstm` 
    ON `leads`.`id` = `leads_cstm`.`id_c` 
group by users.id; 
+0

당신 FAST) 합계 (CASE WHEN THEN leadtype_c = '추천'1 ELSE 0 END) 내가 – realnumber3012

+0

감사합니다 내 대답에 추가하려는! 이것은 내가 필요한 것입니다. – spearman008

0

당신은 이것에 대한 CASE으로 COUNT를 사용할 수 있습니다 : 다음은 MySQL의 구문을 사용

SELECT u.first_name, 
    u.last_name, 
    count(case when leadtype_c = 'Referral' then 1 end), 
    count(case when leadtype_c = 'VM' then 1 end), 
    count(case when leadtype_c = 'Email' then 1 end) 
FROM users u 
    JOIN leads l ON u.id = l.assigned_user_id 
    JOIN leads_cstm lc ON l.id = lc.id_c 
GROUP BY u.id 

이 정확한 결과를 일치 시키려면, 당신은 아마 대신 OUTER JOIN를 사용한다, 그러나 이것은 당신에게 아이디어를 제공합니다.

+0

도움을 주셔서 감사합니다! – spearman008

+0

@ user2636343 - np, 우리가 도울 수있어서 기쁩니다! – sgeddes

관련 문제