2014-06-22 168 views
0

我對此有點失落。我想列出以同一個字母開頭的姓名的數量,並找到包含該首字母的姓名總數。根據類似的值計算行數

例如:

以字母 'A',10 'B' 等開始
name | total 
-------|-------- 
A  | 12 
B  | 10 
C  | 8 
D  | 7 
E  | 3 
F  | 2 
    ... 
Z  | 1 

12名。

這是我迄今爲止

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

不過,我不確定我會怎樣加起來基於像值的列。

+1

如果您正在嘗試執行的操作,則不能在「group by」中引用別名。 –

回答

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部分你很容易找到。希望有所幫助。

2

你不想統計名字,但只有第一個字母。所以你千萬不要group by name,而是由首字母組

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

SQLFiddle