Mysql 将2个SQL查询合并到1个结果中

Mysql 将2个SQL查询合并到1个结果中,mysql,sql,Mysql,Sql,我想将两个SQL查询合并为一个: select d.full_month, COUNT(*) amount from fact_ticket t join dim_queue q on t.queue_id = q.queue_id join vt_scopes s on t.scope_id = s.scope_id join dim_date d on t.create_date_id = d.date_id where q.name = 'Sup

我想将两个SQL查询合并为一个:

 select d.full_month, COUNT(*) amount
    from fact_ticket t
    join dim_queue q on t.queue_id = q.queue_id 
    join vt_scopes s on t.scope_id = s.scope_id
    join dim_date d on t.create_date_id = d.date_id
    where q.name = 'Support'
    and year(GETDATE()) = YEAR(t.create_date)
    and s.statusname not in ('discarded', 'closed')
    group by d.full_month
    order by 1;

现在,这两个函数都给了我一个带有日期列和金额列的结果,但我希望在一个查询中获得所有内容,在这里我可以得到日期、金额1、金额2


有没有一个简单的方法可以做到这一点?

您可以使用下面的查询-

SELECT d.full_month, 
COUNT(IF(s.statusname NOT IN ('discarded', 'closed'),1,NULL)) amount1, 
COUNT(IF(s.statusname IN ('closed'),1,NULL)) amount2 
    FROM fact_ticket t
    JOIN dim_queue q ON t.queue_id = q.queue_id 
    JOIN vt_scopes s ON t.scope_id = s.scope_id
    JOIN dim_date d ON t.create_date_id = d.date_id
    WHERE q.name = 'Support'
    AND YEAR(GETDATE()) = YEAR(t.create_date)
    GROUP BY d.full_month
    ORDER BY 1;
SELECT d.full_month, 
COUNT(IF(s.statusname NOT IN ('discarded', 'closed'),1,NULL)) amount1, 
COUNT(IF(s.statusname IN ('closed'),1,NULL)) amount2 
    FROM fact_ticket t
    JOIN dim_queue q ON t.queue_id = q.queue_id 
    JOIN vt_scopes s ON t.scope_id = s.scope_id
    JOIN dim_date d ON t.create_date_id = d.date_id
    WHERE q.name = 'Support'
    AND t.create_date>= DATE_FORMAT(NOW(),'%Y-01-01 00:00:00') AND t.create_date <= DATE_FORMAT(NOW(),'%Y-12-31 23:59:59');
    GROUP BY d.full_month
    ORDER BY 1;
第二版:即使你们可以通过下面的查询获得索引的好处,若你们在创建日期存在-

SELECT d.full_month, 
COUNT(IF(s.statusname NOT IN ('discarded', 'closed'),1,NULL)) amount1, 
COUNT(IF(s.statusname IN ('closed'),1,NULL)) amount2 
    FROM fact_ticket t
    JOIN dim_queue q ON t.queue_id = q.queue_id 
    JOIN vt_scopes s ON t.scope_id = s.scope_id
    JOIN dim_date d ON t.create_date_id = d.date_id
    WHERE q.name = 'Support'
    AND YEAR(GETDATE()) = YEAR(t.create_date)
    GROUP BY d.full_month
    ORDER BY 1;
SELECT d.full_month, 
COUNT(IF(s.statusname NOT IN ('discarded', 'closed'),1,NULL)) amount1, 
COUNT(IF(s.statusname IN ('closed'),1,NULL)) amount2 
    FROM fact_ticket t
    JOIN dim_queue q ON t.queue_id = q.queue_id 
    JOIN vt_scopes s ON t.scope_id = s.scope_id
    JOIN dim_date d ON t.create_date_id = d.date_id
    WHERE q.name = 'Support'
    AND t.create_date>= DATE_FORMAT(NOW(),'%Y-01-01 00:00:00') AND t.create_date <= DATE_FORMAT(NOW(),'%Y-12-31 23:59:59');
    GROUP BY d.full_month
    ORDER BY 1;
选择d.整月,
计数(如果(s.statusname不在('discarded','closed'),1,NULL))数量1,
计数(如果(s.statusname IN('closed'),1,NULL))数量2
从事实上看
在t.queue\u id=q.queue\u id上加入dim\u队列q
在t.scope\u id=s.scope\u id上加入vt\u范围
在t.create\u date\u id=d.date\u id上加入dim\u date d
其中q.name='Support'

和t.create_date>=date_FORMAT(NOW(),“%Y-01-01 00:00:00”)和t.create_date使用sum函数的另一种方法

SELECT 
  d.full_month,
  SUM(s.statusname NOT IN ('discarded', 'closed')) amount,
  SUM(s.statusname = 'closed') amount_closed 
FROM
  fact_ticket t 
  JOIN dim_queue q 
    ON t.queue_id = q.queue_id 
  JOIN vt_scopes s 
    ON t.scope_id = s.scope_id 
  JOIN dim_date d 
    ON t.create_date_id = d.date_id 
WHERE q.name = 'Support' 
  AND YEAR(GETDATE ()) = YEAR(t.create_date) 
GROUP BY d.full_month 
ORDER BY 1 ;