2014-01-27 1 views
0

나는 'opportunities 기회'라는 기본 필드와 'opportunities opportunity_cstm'이라는 추가 필드를 포함하는 두 개의 관련 테이블을 가지고 있습니다. 우리의 목적을 위해 기회 테이블은 id 및 sales_stage 필드를 포함합니다. opportunity_cstm 테이블은 id_c 및 sales_stage_before_closed_c 필드를 포함합니다. id_c는 두 테이블을 관련시킵니다.% breakdown (어려운 쿼리)을 사용하는 MySQL 하위 쿼리

sales_stage는 1에서 10까지의 값과 'Closed Lost'또는 'Closed Won'중 하나를 포함합니다. 실제 응용 프로그램에서 1-10은 0-9 %에서 90-99 %까지의 비율 밴드를 나타내며 닫힌 손실은 0 %이고 닫힌 원은 100 %입니다.

sales_stage_before_closed_c는 닫히기 전의 비율 밴드입니다.

실제 쿼리에서이 단계에 도달 한 기회 수에 대한 각 sales_stage의 백분율을 표시하고 원 기회와 얼마나 많은 사람들이이 단계에 도달하여 잃어버린 결과를 가져 왔는지 확인해야합니다. 내가 필요로하는 것을 훨씬 더 가깝다 새 쿼리에

업데이트 : 쿼리를 실행하면

SELECT opportunities_c_top.sales_stage_before_closed_c AS 'Sales Stage', 
COUNT(*) * 100.0/
(SELECT COUNT(*) 
FROM `opportunities_cstm` opportunities_cstm join 
`opportunities` opportunities 
on opportunities_cstm.id_c = opportunities.id WHERE opportunities.`sales_stage` = 'Closed Won' AND opportunities_cstm.sales_stage_before_closed_c = opportunities_c_top.sales_stage_before_closed_c) AS 'Closed Won', 

COUNT(*) * 100.0/
(SELECT COUNT(*) 
FROM `opportunities_cstm` opportunities_cstm join 
`opportunities` opportunities 
on opportunities_cstm.id_c = opportunities.id WHERE opportunities.`sales_stage` = 'Closed Lost' AND opportunities_cstm.sales_stage_before_closed_c = opportunities_c_top.sales_stage_before_closed_c) AS 'Closed Lost' 

FROM `opportunities_cstm` opportunities_c_top join 
`opportunities` opportunities_top 
on opportunities_top.id = opportunities_c_top.id_c 
WHERE (opportunities_top.`sales_stage` = 'Closed Won' OR opportunities_top.`sales_stage` = 'Closed Lost') 
GROUP BY opportunities_c_top.sales_stage_before_closed_c 

http://sqlfiddle.com/#!2/ac28d/1

그 여전히 100 % 정확하지만, 그것은 보여 60 % -69 %로 200 대신 양쪽에 50.

+0

원하는 결과 세트와 함께 적절한 DDL (및/또는 sqlfiddle)을 제공하십시오. – Strawberry

+0

원하는 결과 세트뿐 아니라 샘플 데이터도 제공하십시오. –

+0

'이 단계에 도달 한 기회와 기회가 얼마나 되었습니까?'하지만 원의 기회 인 'Closed Won'은 포함되지 않았습니까? –

답변

0

SQL은 실제로 프리젠 테이션을위한 것이 아닙니다. 원시 데이터를 추출한 다음 PHP에서 조작하는 것을 고려할 것입니다.

SELECT 
    opportunities.`sales_stage`, 
    opportunities_cstm.`percent_before_closed_c`, 
    count(*) 
FROM `opportunities` opportunities join 
    `opportunities_cstm` opportunities_cstm 
    on opportunities.id = opportunities_cstm.id_c 
WHERE opportunities.`sales_stage` in ('Closed Lost', 'Closed Won') 
GROUP BY opportunities.`sales_stage`, opportunities_cstm.`percent_before_closed_c` 

요점을 완전히 놓치지 않는 한.

+0

글쎄,이 쿼리는 i-reports라는보고 도구에서 사용하기에 PHP에서는 조작 할 수 없습니다. 여기에 귀하의 대답과 함께 SQL 바이올린 http://sqlfiddle.com/#!2/d3633/2 – user794846

+0

http://sqlfiddle.com/#!2/d3633/13/0 -> 어디서나 당신이 필요로 가까운? –

+0

내 실수는 PHP에 태그를 달아 PHP에서 조작 할 수 있다고 생각했기 때문입니다. – Tony