柱說,我有以下數據集計數明顯不同的字符在
Column1 (VarChar(50 or something))
Elias
Sails
Pails
Plane
Games
我想從這個塔中以產生如下設置:
LETTER COUNT
E 3
L 4
I 3
A 5
S 5
And So On...
一個解決方案我想到的將所有字符串合併爲一個字符串,然後計算該字符串中每個字母的實例,但感覺馬虎。
這是一個比其他任何事情都好奇的練習,但是,有沒有辦法用SQL計算數據集中所有不同的字母數?
CREATE TABLE tblLetter
(
letter varchar(1)
);
INSERT INTO tblLetter ([letter])
VALUES
('a'),
('b'),
('c'),
('d'); -- etc
然後,你可以加入letters
到表數據所在的位置像字母:
select l.letter, count(n.col) Total
from tblLetter l
inner join names n
on n.col like '%'+l.letter+'%'
group by l.letter;
見
但是,爲什麼只有在分組之後纔會過濾掉不相關的結果? '... WHERE len(str) - len(replace(str,ch,''))<> 0 GROUP BY ch'可能證明更快。 –
@AndriyM這應該沒有什麼區別:在任何一種情況下,表達式都會被評估一次,每個單詞/字符對進入'SUM';這就是真正的開支。 「GROUP BY」非常便宜後過濾掉零。事實上,它可能比WHERE條款更便宜,因爲這會導致更少的零檢查(正好是26,而不是'26 * wordCount')。 – dasblinkenlight