如何在MYSQL中的“WHERE”中使用“ALIAS”

时间:2013-07-08 12:50:25

标签: mysql subquery alias where

我没有在“WHERE”MYSQL中使用“ALIAS”,在下面的代码中我需要做类似的事情:

AND(custo_percapita_regiao + comissao_representante)< consigvalor_pago_comissao_representante

========================== code ==================== =======

SELECT

    `consig`.`id`,
    `consig`.`referencia_prod`,
    `consig`.`valor_liquido`,
    `consig`.`percentual_comissao_representante`,
    `consig`.`valor_pago_comissao_representante`,

    `consult`.`id` AS id_consultor,
    `consult`.`nome` nome_consultor,

    `repres`.`id` AS id_representante,
    `repres`.`nome` nome_representante,

    (
        ( SELECT ( `custo_alimentacao` + `custo_gasolina` + `custo_hospedagem` + `outros_custos` ) 
          FROM `regioes` 
          WHERE `id` = `consult`.`regiao` 
        ) / 
        ( SELECT COUNT(*)
          FROM `consignacoes`
          INNER JOIN `consultores` ON `consultores`.`id` = `consignacoes`.`consultor`
          WHERE `consultores`.`regiao` = `consult`.`regiao`
          AND `consignacoes`.`excluido` = "N"
          AND `consignacoes`.`valor_primeiro_pagamento` > 0
        )
    ) AS custo_percapita_regiao,

    (`consig`.`valor_liquido` * `consig`.`percentual_comissao_representante` / 100 ) AS comissao_representante


FROM `consignacoes` `consig`

INNER JOIN `consultores` `consult` ON `consult`.`id` = `consig`.`consultor`
INNER JOIN `administradores` `repres` ON `repres`.`id` = `consig`.`representante`

WHERE `representante` = 3

AND `consig`.`excluido` = "N"
AND `consig`.`valor_primeiro_pagamento` > 0

ORDER BY `consult`.`regiao` ASC, `consult`.`nome`

2 个答案:

答案 0 :(得分:0)

尝试使用变量:

SET @custo_percapita_regiao = 0;
SET @comissao_representante = 0;
SELECT

    `consig`.`id`,
    `consig`.`referencia_prod`,
    `consig`.`valor_liquido`,
    `consig`.`percentual_comissao_representante`,
    `consig`.`valor_pago_comissao_representante`,

    `consult`.`id` AS id_consultor,
    `consult`.`nome` nome_consultor,

    `repres`.`id` AS id_representante,
    `repres`.`nome` nome_representante,
    @custo_percapita_regiao :=
    (
        ( SELECT ( `custo_alimentacao` + `custo_gasolina` + `custo_hospedagem` + `outros_custos` ) 
          FROM `regioes` 
          WHERE `id` = `consult`.`regiao` 
        ) / 
        ( SELECT COUNT(*)
          FROM `consignacoes`
          INNER JOIN `consultores` ON `consultores`.`id` = `consignacoes`.`consultor`
          WHERE `consultores`.`regiao` = `consult`.`regiao`
          AND `consignacoes`.`excluido` = "N"
          AND `consignacoes`.`valor_primeiro_pagamento` > 0
        )
    ) AS custo_percapita_regiao,

    @comissao_representante := (`consig`.`valor_liquido` * `consig`.`percentual_comissao_representante` / 100 ) AS comissao_representante


FROM `consignacoes` `consig`

INNER JOIN `consultores` `consult` ON `consult`.`id` = `consig`.`consultor`
INNER JOIN `administradores` `repres` ON `repres`.`id` = `consig`.`representante`

WHERE `representante` = 3 AND (@custo_percapita_regiao + @comissao_representante ) < consig.valor_pago_comissao_representante

AND `consig`.`excluido` = "N"
AND `consig`.`valor_primeiro_pagamento` > 0

ORDER BY `consult`.`regiao` ASC, `consult`.`nome`

答案 1 :(得分:0)

可能是这样的: -

SELECT
    `consig`.`id`,
    `consig`.`referencia_prod`,
    `consig`.`valor_liquido`,
    `consig`.`percentual_comissao_representante`,
    `consig`.`valor_pago_comissao_representante`,
    `consult`.`id` AS id_consultor,
    `consult`.`nome` nome_consultor,
    `repres`.`id` AS id_representante,
    `repres`.`nome` nome_representante,
    Sub1.RegionTot / Sub2.RegionCount AS custo_percapita_regiao,
    (`consig`.`valor_liquido` * `consig`.`percentual_comissao_representante` / 100 ) AS comissao_representante
FROM `consignacoes` `consig`
INNER JOIN `consultores` `consult` ON `consult`.`id` = `consig`.`consultor`
INNER JOIN `administradores` `repres` ON `repres`.`id` = `consig`.`representante`
LEFT OUTER JOIN 
(
    SELECT `id`, ( `custo_alimentacao` + `custo_gasolina` + `custo_hospedagem` + `outros_custos` ) AS RegionTot
    FROM `regioes` 
) Sub1 ON Sub1.id = `consult`.`regiao` 
LEFT OUTER JOIN 
(
    SELECT `consultores`.`regiao`, COUNT(*) AS RegionCount
    FROM `consignacoes`
    INNER JOIN `consultores` ON `consultores`.`id` = `consignacoes`.`consultor`
    WHERE `consignacoes`.`excluido` = "N"
    AND `consignacoes`.`valor_primeiro_pagamento` > 0
    GROUP BY `consultores`.`regiao`
) Sub2 ON Sub2.`regiao` = `consult`.`regiao` 
WHERE `representante` = 3
AND `consig`.`excluido` = "N"
AND `consig`.`valor_primeiro_pagamento` > 0
AND (Sub1.RegionTot / Sub2.RegionCount) < (`consig`.`valor_liquido` * `consig`.`percentual_comissao_representante` / 100 )
ORDER BY `consult`.`regiao` ASC, `consult`.`nome`

(部分地将SELECT中的相关子选项交换为连接,以便可以轻松使用这些值)