sql - 占行总数的百分比

标签 sql sql-server sql-server-2017

我有一些表,我猜测有一些查询,我想获得行而不是列的总数的百分比。

我的查询:

SELECT
    SUM(CASE WHEN type = '0' THEN duration END) AS 'type0',
    SUM(CASE WHEN type = '1' THEN duration END) AS 'type1',
    SUM(CASE WHEN type = '2' THEN duration END) AS 'type2'
FROM table1
GROUP BY range
ORDER BY range

我得到了什么:

┌──────────────────┬──────────────────┬──────────────────┐
│      type0       │      type1       │      type2       │
├──────────────────┼──────────────────┼──────────────────┤
│ 59989.3049204680 │ 25232.1543858130 │ 24831.1788671015 │
│  3306.3676530180 │  1705.9501506120 │  2657.4211752480 │
│   352.0299258450 │  1692.4885264580 │  1805.3495437180 │
│    37.4959716400 │  1584.6392620720 │  1343.1338054350 │
│     8.6286011400 │  1392.7870618600 │  1042.1155937090 │
│     9.4098509860 │  1269.7669830510 │   970.8922643280 │
│     7.6270751800 │  1163.2768018390 │   836.8802361650 │
│     2.9459229000 │   873.3172769110 │   464.6357979220 │
│     3.2543335080 │   695.5214343770 │   380.5008553400 │
│     5.4269405200 │  3120.0459350020 │  3603.2397332800 │
└──────────────────┴──────────────────┴──────────────────┘

我想要得到什么:

┌────────┬────────┬────────┐
│ type0  │ type1  │ type2  │
├────────┼────────┼────────┤
│ 54,51% │ 22,93% │ 22,56% │
│ 43,11% │ 22,24% │ 34,65% │
│ 9,14%  │ 43,96% │ 46,89% │
│ 1,26%  │ 53,44% │ 45,30% │
│ 0,35%  │ 57,00% │ 42,65% │
│ 0,42%  │ 56,43% │ 43,15% │
│ 0,38%  │ 57,94% │ 41,68% │
│ 0,22%  │ 65,13% │ 34,65% │
│ 0,30%  │ 64,44% │ 35,26% │
│ 0,08%  │ 46,37% │ 53,55% │
└────────┴────────┴────────┘

我知道如何计算每行的百分比:

CAST(100 * SUM(duration) / SUM(SUM(duration)) OVER () AS DECIMAL(5, 2))

作为窗口函数,但我不知道对行执行相同操作的技巧。

最佳答案

只需在 SELECT 子句中进行数学计算即可:

 SELECT
    SUM(CASE WHEN type = 0 THEN duration END)/SUM(CASE WHEN type in (0,1,2) THEN duration END) as type1_perc,
    SUM(CASE WHEN type = 1 THEN duration END)/SUM(CASE WHEN type in (0,1,2) THEN duration END) as type2_perc,
    SUM(CASE WHEN type = 2 THEN duration END)/SUM(CASE WHEN type in (0,1,2) THEN duration END) as type3_perc
FROM table1
GROUP BY range
ORDER BY range

关于sql - 占行总数的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47835396/

相关文章:

sql - 如何使用 postgresql 计算排列?

c# - IndexOutOfRangeException SqlDataReader 从表中读取 bool 值

sql-server - 使用 FOR JSON AUTO 语法时删除空的 json 对象

mysql - SQL(MYSQL) 选择该列总和 > 0 的列名

sql - postgresql 按大小列出和排序表

java - Spring + Hibernate SQL 实体名称未解析

c# - 我可以在用户输入上使用 asp.net 验证器来避免 sql 注入(inject)攻击吗?

SQL Server : How to extract comments from stored procedures for deployment

asp.net-mvc - 如何解决在 Linux(Ubuntu 18.04)中做 EF Core 数据库脚手架的 'Cannot authenticate using Kerberos' 问题?有什么解决办法吗?

使用 OR 子句的 SQL 查询性能