2014-01-27 3 views
0

Хорошо, у меня есть две связанные таблицы, одна из которых содержит основные поля, называемые «возможностями», и одну, которая содержит поля сложения, называемые «возможностями_cstm». Для наших целей таблица возможностей содержит следующие поля: id и sales_stage. Таблица options_cstm содержит поля id_c и sales_stage_before_closed_c. id_c - это то, что связывает две таблицы.Подзапрос Mysql с процентной разбивкой (сложный запрос)

sales_stage содержит значения от 1 до 10, а также «Закрытые потери» или «Закрытый вход». В реальном приложении 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

'сколько возможностей достигло этого этапа и привело к выигрышной возможности, но вы не включаете« Закрытый выигрыш », который является выигрышной возможностью? –

ответ

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

Смежные вопросы