SQL:是否可以将这两个SQL语句合并为一个查询?

时间:2016-03-05 18:50:47

标签: sql sql-server performance database-performance processing-efficiency

我在Windows 7上使用MS SQL Server 2014.

在数据库中,我有一个名为Orders的表,如下所示:

OrderID | CustomerID | OrderDate | ...   
----------------------------------------
1028      90           2015-10-10   
...
2416      68           2016-02-12

我需要两件事:

  1. 客户总数
  2. 今年的客户数量。
  3. 我是SQL的初学者,但我设法在我的应用程序中编写了两个似乎可以完成这项工作的SQL语句:

    对于要求#1

    SELECT COUNT(DISTINCT CustomerID) FROM Orders; // result = 74   
    

    对于要求#2:

    SELECT COUNT(DISTINCT CustomerID) FROM Orders WHERE OrderDate >= '2016-01-01'; // result = 34   
    

    我想知道是否可以将以某种方式上述两个SQL语句合并/组合成一个查询...?当然,我需要两个结果:总客户(上述情况为74)以及今年的客户(即34)。

    数据库是一个远程数据库,因此非常欢迎任何提高查询性能的想法:)

2 个答案:

答案 0 :(得分:4)

使用条件聚合:

SELECT COUNT(DISTINCT CustomerID) as Total,
       COUNT(DISTINCT CASE WHEN OrderDate >= '2016-01-01' THEN CustomerID END) as Total_2016
FROM Orders;

答案 1 :(得分:1)

您可以像上一个答案一样水平组合数据,或者如果您认为需要表格形式,可以使用UNION垂直组合数据:

SELECT 'Total Customers' As Description, COUNT(DISTINCT CustomerID) As Number FROM Orders // total = 74   
Union ALL   
SELECT '2016 Customers' AS Description, COUNT(DISTINCT CustomerID) As Number FROM Orders WHERE OrderDate >= '2016-01-01'; // this_year = 34