根据相似值计算行数

时间:2014-06-22 22:14:53

标签: sql sql-server sql-server-2012

我对此有点失落。我想列出以相同字母开头的名字数量,并找到包含该第一个相同字母的名称总数。

例如:

name   |  total
-------|--------
 A     |   12
 B     |   10
 C     |   8
 D     |   7
 E     |   3
 F     |   2
   ...
 Z     |   1

12个以字母“A”开头的名称,10个以“B”开头的名称,等等。

这是我到目前为止所拥有的

SELECT 
LEFT(customers.name,1) AS 'name'
FROM customers
WHERE
customers.name LIKE '[a-z]%'
GROUP BY name

但是,我不确定如何根据相似值添加列。

2 个答案:

答案 0 :(得分:3)

这应该适合你:

SELECT 
    LEFT(customers.name,1) AS 'name',
    COUNT(*) AS NumberOfCustomers
FROM customers
WHERE
    customers.name LIKE '[a-z]%'
GROUP BY LEFT(customers.name,1)

编辑:忘记解释;正如许多人已经提到的那样,你需要对计算本身进行分组而不是你给它的别名,因为GROUP BY操作实际上发生在SELECT之前,因此还不知道别名。您可以轻松找到COUNT部分。希望有所帮助。

答案 1 :(得分:2)

你不想计算名字,只计算第一个字母。所以你不能group by name,而是按第一个字母分组

SELECT LEFT(name, 1) AS name, count(*)
FROM customers
GROUP BY LEFT(name, 1)

SQLFiddle