2015-07-21 165 views
1

我有我的Postgresql數據庫中的用戶列表,我想統計每個字母有多少用戶。如何在MySQL中使用generate_series()相當於計數項目?

下面是SQL查詢:

select chr(chars.letter + ascii('A')) as letter, 
     count(m.nome) 
from generate_series(0, 25) as chars(letter) 
left join merchant m on ascii(left(m.nome, 1)) = chars.letter + ascii('A') 
group by letter 
order by letter asc 

(感謝this answer

下面是結果在phpPgAdmin的:

enter image description here

現在,因爲我遷移到MySQL我需要使用相同的查詢,但似乎MySQL不使用generate_series()。那麼,如何得到相同的結果呢?

回答

1

因此,讓我們假設你有一些表,其中至少有26條記錄(也許information_schema.columns也許?)。

下面將產生所有大寫字母:

SET @c := 64; 

SELECT CAST(CHAR(@c := @c + 1) AS CHAR(1)) AS letter 
FROM table_with_at_least_26_rows 
LIMIT 26 
; 

以上面嵌入到您的原始查詢,查詢前把SET @c := 64;,然後用(SELECT CAST ... LIMIT 26) chars替換generate_series(0, 25) as chars(letter)。一定要包括括號,因爲它會使查詢變成一個子查詢。

查詢的SQL小提琴:http://sqlfiddle.com/#!9/6efac/8

+0

埃姆...事實是,我不能把它嵌入:( – smartmouse

+0

@smartmouse - 不能像在不知道如何,或不允許? –

+0

我不知道如何,我嘗試了幾種方法,但都沒有工作。 – smartmouse

0

下面是最終的解決方案:

SELECT 
    LEFT(name, 1) AS first_letter, 
    COUNT(*) AS total 
FROM users 
GROUP BY first_letter 

Source