SQL:是否可以将这两个 SQL 语句合并为一个查询?
SQL: Is it possible to merge these two SQL statements into a single query?
我在 Windows 7 上使用 MS SQL Server 2014。
在数据库中我有一个名为 Orders
的 table,它看起来像这样:
OrderID | CustomerID | OrderDate | ...
----------------------------------------
1028 90 2015-10-10
...
2416 68 2016-02-12
我需要两件事:
- 客户总数
- 今年的客户数量。
我是 SQL 的初学者,但我设法在我的应用程序中编写了 2 个 SQL 似乎可以完成工作的语句:
对于要求 #1
SELECT COUNT(DISTINCT CustomerID) FROM Orders; // result = 74
对于要求 #2:
SELECT COUNT(DISTINCT CustomerID) FROM Orders WHERE OrderDate >= '2016-01-01'; // result = 34
我想知道是否有可能 merge/combine 以某种方式 上述 2 SQL 语句到一个查询中...?当然,我需要两个结果:总客户数(上例中为 74 个)和今年的客户数(即 34 个)。
该数据库是一个远程数据库,因此非常欢迎任何加快查询性能的想法:)
使用条件聚合:
SELECT COUNT(DISTINCT CustomerID) as Total,
COUNT(DISTINCT CASE WHEN OrderDate >= '2016-01-01' THEN CustomerID END) as Total_2016
FROM Orders;
您可以像上一个答案那样水平合并数据,或者您可以使用 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
我在 Windows 7 上使用 MS SQL Server 2014。
在数据库中我有一个名为 Orders
的 table,它看起来像这样:
OrderID | CustomerID | OrderDate | ...
----------------------------------------
1028 90 2015-10-10
...
2416 68 2016-02-12
我需要两件事:
- 客户总数
- 今年的客户数量。
我是 SQL 的初学者,但我设法在我的应用程序中编写了 2 个 SQL 似乎可以完成工作的语句:
对于要求 #1
SELECT COUNT(DISTINCT CustomerID) FROM Orders; // result = 74
对于要求 #2:
SELECT COUNT(DISTINCT CustomerID) FROM Orders WHERE OrderDate >= '2016-01-01'; // result = 34
我想知道是否有可能 merge/combine 以某种方式 上述 2 SQL 语句到一个查询中...?当然,我需要两个结果:总客户数(上例中为 74 个)和今年的客户数(即 34 个)。
该数据库是一个远程数据库,因此非常欢迎任何加快查询性能的想法:)
使用条件聚合:
SELECT COUNT(DISTINCT CustomerID) as Total,
COUNT(DISTINCT CASE WHEN OrderDate >= '2016-01-01' THEN CustomerID END) as Total_2016
FROM Orders;
您可以像上一个答案那样水平合并数据,或者您可以使用 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