用于查找公共性的SQL计数函数

用于查找公共性的SQL计数函数,sql,sql-server,count,Sql,Sql Server,Count,我面临的问题如下:列出产品名称的首字母及其总数。仅当有3个或更多产品以字母表中的该字母开头时,才显示字母和计数 很明显,查询需要使用COUNT聚合,但我正在仔细研究这个问题。如何编写此查询 预期产出: ProductName Total C 9 G 11 等等 我假设在select语句中需要一个子字符串 SELECT SUBSTRING(ProductName,1,1) A

我面临的问题如下:列出产品名称的首字母及其总数。仅当有3个或更多产品以字母表中的该字母开头时,才显示字母和计数

很明显,查询需要使用COUNT聚合,但我正在仔细研究这个问题。如何编写此查询

预期产出:

ProductName           Total  
C                      9  
G                      11  
等等

我假设在select语句中需要一个子字符串

SELECT SUBSTRING(ProductName,1,1)    AS ProductName,
       COUNT(ProductName)            AS Total
FROM   Products

但是使用WHERE和count函数会给我一个聚合错误是SQLServer2012?

您只需要一个适当的组和having子句:

SELECT
    LEFT(ProductName, 1) AS ProductName,
    COUNT(*) AS [Total]
FROM Products
GROUP BY
    LEFT(ProductName, 1)
HAVING COUNT(*) >= 3

您不能使用
where
子句中的
aggregate
函数来过滤结果

要过滤组的内容,必须使用
having
子句,而不是
where
子句。试试这个

SELECT SUBSTRING(ProductName,1,1)    AS ProductName,
       COUNT(ProductName)            AS Total
FROM   Products
group by SUBSTRING(ProductName,1,1)
having COUNT(ProductName) >=3

您能否添加一些示例数据和预期输出。同时标记您正在使用的数据库确保:请参见上面的编辑。完美!我在分组BY子句中缺少子字符串。谢谢完美地工作