COUNT(
DISTINCT ( CASE WHEN ( ( `IsFba` = 1 ) AND ( `Status` = 5 )) THEN `OrderSourceSku` ELSE NULL END )) AS `FbaListingCount`,
COUNT(
DISTINCT ( CASE WHEN ( NOT ( `IsFba` = 1 ) AND ( `Status` = 5 )) THEN `OrderSourceSku` ELSE NULL END )) AS `ListingCount`,
`OrderSourceId` AS `OrderSourceId`,
`PlanType` AS `PlanType`,
COUNT( `Id` ) AS `ExeCount`,
SUM((
CASE
WHEN ( `Status` = 5 ) THEN
1 ELSE 0
END
)) AS `ExeSuccessCount`
FROM
(
SELECT
*
FROM
(
SELECT
`Id` AS `Id`,
`IsFba` AS `IsFba`,
`Status` AS `Status`,
`OrderSourceSku` AS `OrderSourceSku`,
`OrderSourceId` AS `OrderSourceId`,
`PlanType` AS `PlanType`
FROM
`Apx_BasicPlan_LogDetail`
WHERE
(((((
`CustomerId` = 1
)
AND ( `OrderSourceId` = 18547 ))
AND ( `PlanType` = 3 ))
AND ( `CreationTime` < '2024-01-06 00:00:00' ))
AND ((
`ExecuteType` = 5
)
AND ( `PlanType` = 4 ))) UNION
SELECT
`Id` AS `Id`,
`IsFba` AS `IsFba`,
`Status` AS `Status`,
`OrderSourceSku` AS `OrderSourceSku`,
`OrderSourceId` AS `OrderSourceId`,
`PlanType` AS `PlanType`
FROM
`Apx_BasicPlan_LogDetail`
WHERE
(((((
`CustomerId` = 1
)
AND ( `OrderSourceId` = 18547 ))
AND ( `PlanType` = 3 ))
AND ( `CreationTime` < '2024-01-06 00:00:00' ))
AND ( `PlanType` <> 4 ))
) unionTable
) t;
建议优化:
SELECT
COUNT(
DISTINCT ( CASE WHEN ( ( `IsFba` = 1 ) AND ( `Status` = 5 )) THEN `OrderSourceSku` ELSE NULL END )) AS `FbaListingCount`,
COUNT(
DISTINCT ( CASE WHEN ( NOT ( `IsFba` = 1 ) AND ( `Status` = 5 )) THEN `OrderSourceSku` ELSE NULL END )) AS `ListingCount`,
`OrderSourceId` AS `OrderSourceId`,
`PlanType` AS `PlanType`,
COUNT( `Id` ) AS `ExeCount`,
SUM((
CASE
WHEN ( `Status` = 5 ) THEN
1 ELSE 0
END
)) AS `ExeSuccessCount`
FROM
(
SELECT
*
FROM
(
SELECT
`Id` AS `Id`,
`IsFba` AS `IsFba`,
`Status` AS `Status`,
`OrderSourceSku` AS `OrderSourceSku`,
`OrderSourceId` AS `OrderSourceId`,
`PlanType` AS `PlanType`
FROM
`Apx_BasicPlan_LogDetail`
WHERE
(((((
`CustomerId` = 1
)
AND ( `OrderSourceId` = 18547 ))
AND ( `PlanType` = 3 ))
AND ( `CreationTime` < '2024-01-06 00:00:00' ))
)
) unionTable
) t;

该查询是循环内查询,根据PlanType进行四次循环查询,PlanType为4时候ExecuteType需要为5比较特殊,因此根据PlanType将sql进行拆分为两个查询