2016-09-19 1 views
0

私はMySQLの中で「顧客」と呼ばれるテーブルを持っているとMySQLの最初の文字の値はどのように数えられますか?

SELECT id, name, left(UPPER(name),1) AS letter 

でこれを取得:

id | name | letter 
1 John  J 
2 James  J 
3 Julia  J 
4 Lauren L 
5 Peter  P 
6 Pietro P 

しかし、今、私はこれが最初の文字の合計に

id | name | letter | total 
1 John  J  3 
2 James  J  3 
3 Julia  J  3 
4 Lauren L  1 
5 Peter  P  2 
6 Pietro P  2 
のカウントを取得する必要がありますが

私はそれを解決しました(一時的に)追加

(SELECT COUNT(id) FROM customers WHERE left(UPPER(name),1) = letter) AS total" 

ですが、元のクエリには多くのINNER JOINが含まれていますので、この最後のを選択してください。(不必要な場合があります)の内部結合を複製します。

提案がありますか?

+0

'select count(*)、left(name、1)... group by left(name、1)'、基本的には? –

+0

「group by」は、すべての文字(John、Lauren、Peter)の拳の名前を表示していますが、カウントは大丈夫です – khristoff

答えて

2

最初のクエリを、各イニシャルのカウントを取得するサブクエリに結合します。

SELECT id, name, letter, total 
FROM customers AS c 
JOIN (SELECT UPPER(LEFT(name, 1)) AS letter, COUNT(*) AS total 
     FROM customers 
     GROUP BY letter) AS l 
ON l.letter = UPPER(LEFT(c.name, 1)) 
+0

ちょっと、とても速かったです!ありがとう! – khristoff

0

外側の選択で包み:内側の選択は、あなたの凶悪が参加しているところ...

select id, name, count(*) 
from (SELECT id, name, left(UPPER(name),1) AS letter 
     from da_table) as dummy 
group by id, name; 

おっとり - 読んでください。インライン表示から「文字」を引っ張って、それらを数え、「文字」でグループ化するだけで、クエリを変更してください。

select letter, count(*) 
from [all kinds of stuff here) as dummy 
group by letter; 
関連する問題