繁体   English   中英

如何将两个带有having子句的查询合并为一个?

[英]How can I combine two queries with a having clause into one?

我希望你能帮我解决这两个查询问题:

select count(distinct ID), sum(AMOUNT) 
from SALES 
where YEAR(SALEDATE) = '2015' and SALETYPE ='CASH'
group by CUSTOMER having sum(AMOUNT) >=500;

select count(distinct ID), sum(AMOUNT) 
from SALES 
where YEAR(SALEDATE) = '2015' and SALETYPE ='CREDITCARD'
group by CUSTOMER having sum(AMOUNT) >=1000;

将它们合二为一的最佳方法是什么? 我的目的是选择客户通过CREDITCARD支付超过500现金或超过1000的所有情况。

非常感谢你的帮助。

在您的情况下,您可以使用此示例:

select  count(distinct ID), 
        sum(AMOUNT) 
from    SALES 
where   YEAR(SALEDATE) = '2015' 
    and SALETYPE ='CASH' 
group by CUSTOMER 
having  sum(AMOUNT) >=500;

UNION

select  count(distinct ID), 
        sum(AMOUNT) 
from    SALES 
where   YEAR(SALEDATE) = '2015' 
    and SALETYPE ='CREDITCARD' 
group by CUSTOMER 
having  sum(AMOUNT) >=1000;

如果您希望所有记录没有明显的,则为UN UNION ALL。

select  count(distinct ID), 
        sum(AMOUNT) 
from    SALES 
where   YEAR(SALEDATE) = '2015' 
    and SALETYPE ='CASH' 
group by CUSTOMER 
having  sum(AMOUNT) >=500;

UNION ALL

select  count(distinct ID), 
        sum(AMOUNT) 
from    SALES 
where   YEAR(SALEDATE) = '2015' 
        and SALETYPE ='CREDITCARD' 
group by CUSTOMER 
having  sum(AMOUNT) >=1000;

having子句中使用条件聚合:

select count(distinct ID), sum(AMOUNT) 
from SALES 
where YEAR(SALEDATE) = '2015' and 
      SALETYPE IN ('CASH', 'CREDITCARD')
group by CUSTOMER
having sum(case when SALETYPE = 'CASH' then AMOUNT end) >= 50 OR
       sum(case when SALETYPE = 'CREDITCARD' then AMOUNT end) >= 1000;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM