MySQL UNION - 复制子查询

标签 mysql union

这是我当前的查询:

Select Month as ReqMonth1,
    sum(TotalUsage) As ReqCount1,
    sum(Memberbase) as Club_updates_Records1,
    round(sum(TotalUsage)/sum(Memberbase)*100,0) AS UsagePerc
from(
Select * from (
SELECT
     CAST(DATE_FORMAT(Log_Date, '%b-%y') AS CHAR(100)) AS 'Month',
     CAST(DATE_FORMAT(Log_Date, '%y-%m') AS CHAR(100)) AS 'Monthsort',
     count(Requests.`fk_Members_ID`) AS TotalUsage,
     0 as Memberbase
FROM
     `Requests` Requests INNER JOIN `Members` Members ON Requests.`fk_Members_ID` = Members.`ID`
WHERE
     cast(Requests.`Log_date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate}
 AND Members.`Club` = $P{Club}
GROUP BY
     CAST(DATE_FORMAT(Log_Date, '%M-%y') AS CHAR(100)) ) as A

UNION ALL

Select * from (
SELECT
     CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%b-%y') AS CHAR(100)) AS 'Month',
     CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%y-%m') AS CHAR(100)) AS 'Monthsort',
     0 AS TotalUsage,
     ifnull(max(Club_updates.`Records`),1) AS MemberBase
FROM
     `Club updates` Club_updates
WHERE
     cast(Club_updates.`Update_Date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate}
 AND Club_updates.`fk_Club` = $P{Club}
GROUP BY  CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%M-%y') AS CHAR(100)) ) As B) as D
group by Month
Order by MonthSort

我正在尝试复制/添加另一个子查询“A”,并更改 WHERE 子句中的 Close_Date 字段而不是 Log_Date 字段。 基本上仅在“ReqCount1”字段中产生两个子查询的总和。

如有任何帮助,我们将不胜感激。

最佳答案

好的,问题解决了

这是解决方案(在 WHERE 子句中添加一个附加条件)

Select Month as ReqMonth1,
    sum(TotalUsage) As ReqCount1,
    sum(Memberbase) as Club_updates_Records1,
    round(sum(TotalUsage)/sum(Memberbase)*100,0) AS UsagePerc
from(
Select * from (
SELECT
     CAST(DATE_FORMAT(Log_Date, '%b-%y') AS CHAR(100)) AS 'Month',
     CAST(DATE_FORMAT(Log_Date, '%y-%m') AS CHAR(100)) AS 'Monthsort',
     count(Requests.`fk_Members_ID`) AS TotalUsage,
     0 as Memberbase
FROM
     `Requests` Requests INNER JOIN `Members` Members ON Requests.`fk_Members_ID` = Members.`ID`
WHERE
     cast(Requests.`Log_date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate}
 AND Members.`Club` = $P{Club} AND Requests.`Request_Type` <> 7
GROUP BY
     CAST(DATE_FORMAT(Log_Date, '%M-%y') AS CHAR(100)) ) as A


UNION ALL
Select * from (
SELECT
     CAST(DATE_FORMAT(Close_Date, '%b-%y') AS CHAR(100)) AS 'Month',
     CAST(DATE_FORMAT(Close_Date, '%y-%m') AS CHAR(100)) AS 'Monthsort',
     count(Requests.`fk_Members_ID`) AS TotalUsage,
     0 as Memberbase
FROM
     `Requests` Requests INNER JOIN `Members` Members ON Requests.`fk_Members_ID` = Members.`ID`
WHERE
     cast(Requests.`Close_Date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate}
 AND Members.`Club` = $P{Club} AND Requests.`Request_Type` = 7
GROUP BY
     CAST(DATE_FORMAT(Close_Date, '%M-%y') AS CHAR(100)) ) as G

UNION ALL


Select * from (
SELECT
     CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%b-%y') AS CHAR(100)) AS 'Month',
     CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%y-%m') AS CHAR(100)) AS 'Monthsort',
     0 AS TotalUsage,
     ifnull(max(Club_updates.`Records`),1) AS MemberBase
FROM
     `Club updates` Club_updates
WHERE
     cast(Club_updates.`Update_Date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate}
 AND Club_updates.`fk_Club` = $P{Club}
GROUP BY  CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%M-%y') AS CHAR(100)) ) As B) as D
group by Month
Order by MonthSort

关于MySQL UNION - 复制子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37454617/

相关文章:

MySQL:仅当第一个查询未返回结果时才执行第二个查询

mysql - 如何使用 AWS rds-data 使用 boto3 和 AWS-aurora 对我的 mysql 查询进行分页?

java - 替换java准备的mysql查询语句中的字符串?

mysql - 如何将 NULL 视为 MAX 日期而不是在 MySQL 中忽略它?

SQL - 1 个父表,2 个子表 - 为子表中的每一行返回单行

sql - 在同一个表上组合两个 SQL SELECT 语句

sql - 将数据从一行获取到多行时替代 UNION 操作?

mysql - phpmyadmin 接受查询而 php 带来错误 UNION 和 LIMIT

php - 为什么我的搜索栏不显示结果?

php - 具有一对多关系的表单