sql - 按 SQL Server 中总数的百分比分组

标签 sql sql-server subquery

我有一个包含一列项目的 SQL 表,我想按降序显示每个项目占总计数的百分比。

例如

Column A
Item 1
Item 1
Item 2
Item 3

我想显示:

Column A
Item 1   0.5
Item 2   0.25
Item 3   0.25

到目前为止,我已经尝试过以下方法:

SELECT [Column A], (count([Column A]) / count(*))
  FROM [table]
  GROUP BY [Column A]
  Order by (count([Column A]) / count(*)) DESC

但是,一切都返回为 1。

最佳答案

您可以尝试在主查询中按[Column A]列进行COUNT分组。然后在子查询中进行总count除法。

CREATE TABLE T(
   [Column A] VARCHAR(50)
); 

INSERT INTO T VALUES ('Item 1');
INSERT INTO T VALUES ('Item 1');
INSERT INTO T VALUES ('Item 2');
INSERT INTO T VALUES ('Item 3');

SELECT [Column A],COUNT(*) /CAST ((SELECT COUNT(*) FROM T) AS FLOAT)
FROM T 
GROUP BY [Column A]

sqlfiddle

或者您可以使用CROSS JOIN获取总计然后进行除法。

SELECT [Column A],COUNT(*) /CAST(total AS FLOAT)
FROM T CROSS JOIN (SELECT COUNT(*) total FROM T) v
GROUP BY [Column A],total

关于sql - 按 SQL Server 中总数的百分比分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52240104/

相关文章:

mysql - 按年份计算新的和返回的项目

Mysql 内连接问题

sql - 如何执行此选择?

SQL Server组合键问题

mysql - 带有 WHERE 子句的 Lag() 函数

.net - Linq 查询返回不正确的结果集

sql-server - 从 tiny_tds 连接到 SQL Server 需要哪些端口?

sql - 通过 named_scope 返回对象数组 -- has_many...belongs_to 关联; UNION ALL 查询

sql - 如何编写配置单元 ql 查询以合并 2 个表中的列?

mysql - 错误 : column specified more than once in Postgres