尝试在表格中列出特定年份的数量

时间:2019-04-18 08:11:00

标签: sql sql-server count

我正在尝试从表格中选择具有特定年份的日期时间,并显示具有该年份的那些日期的数量。

我只能从日期时间中选择年份,但是它给了我每个特定日期的数量,而不仅仅是年份。喜欢:

|       Date | Amount |
| 2012-04-07 |      5 |
| 2012-05-21 |      5 |

但是我只想要2012, 10

Select YEAR(Orderdate), count(*)
From Orders
Group by Orderdate

输出需要在一行中显示带有2012年的一行,在第二栏中显示2012年的总数。像这样:

| Year | Amount |
| 2012 |     10 |
| 2013 |      8 |
| 2014 |      2 |

3 个答案:

答案 0 :(得分:3)

在您的WHERE子句中使用正确的日期逻辑:

SELECT YEAR(OrderDate) AS [Year],
       COUNT(OrderID) AS Orders --Assumed Column Name
FROM Orders
WHERE OrderDate >= '20120101'
  AND OrderDate < '20130101'
GROUP BY YEAR(OrderDate);

YEAR(OrderDate)这样的子句不可SARGable,这意味着不能使用表中的索引。这可能会对查询的性能产生严重影响。因此,使用布尔逻辑而不在WHERE的列中应用函数是最佳选择。

答案 1 :(得分:2)

对于SQL Server;

SELECT YEAR(Orderdate), COUNT(1)
FROM Orders
GROUP BY YEAR(Orderdate)

答案 2 :(得分:0)

您可以通过编写嵌套查询来实现

SELECT Year , Count(*) AS Total_Count
FROM (Select YEAR(Orderdate) AS Year, *
      From Orders)
WHERE Year = '2012'
GROUP BY Year