SQL从列中列出以A,B,C-Z开头的名称的百分比

我想从一列显示名称中每个字母的百分比。

例如A = 20%,B = 30%,Z = 10%等。

名称:

Apple
Ace
Benedict
Been
Broom
Car
Make
Safe
Thanksgiving
Zappers
js20090617 回答:SQL从列中列出以A,B,C-Z开头的名称的百分比

您需要LEFT()COUNT()GROUP BY才能获得预期的结果:

请找到示例执行:

CREATE TABLE TestTable (String VARCHAR (100));

INSERT INTO TestTable (String) VALUES
('Apple'),('Ace'),('Benedict'),('Been'),('Broom'),('Car'),('Make'),('Safe'),('Thanksgiving'),('Zappers');

DECLARE @TCount AS INT = 0;
SELECT @TCount = COUNT(*) FROM TestTable;

SELECT LEFT(String,1) AS FChar,CONCAT(COUNT(LEFT(String,1)) *100 / @TCount,'%') AS CharPercent
FROM TestTable 
GROUP BY LEFT(String,1)
ORDER BY LEFT(String,1)

Working demo on db<>fiddle

,

您可以使用窗口功能。正确的逻辑是:

SELECT LEFT(name,1) AS first_char,COUNT(*) * 100.0 / SUM(COUNT(*)) OVER() AS pct
FROM t
GROUP BY LEFT(name,1)
ORDER BY first_char;
本文链接:https://www.f2er.com/3097398.html

大家都在问