在 SQL 中计算总行数的百分比

在 SQL 中计算总行数的百分比_第1张图片
在 SQL 中计算总行数的百分比_第2张图片

如何查看每种水果的订单占订单总数的百分比?事实上,在 SQL 中计算行百分比有三种标准方法。分别是:
1.使用 OVER() 子句
2.使用子查询
3.使用公用表表达式,或 CTE

OVER() 子句
OVER 子句主要与窗口函数一起使用,用于确定将查询中的哪些行应用于函数、该函数以什么顺序计算这些行以及何时重新开始函数的计算。
OVER 子句是 SQL 中计算行百分比的最有效方法,因此如果你最着重效率,它应该是你的首选。以下是获得百分比的公式:

count(*) * 100.0 / sum(count(*)) over()

在 SQL 中计算总行数的百分比_第3张图片
看起来不错,但稍微四舍五入也没什么坏处。不幸的是,使用 over() 子句并不容易做到这一点

使用子查询(推荐方法)
并非所有数据库都支持 OVER() 子句,因此子查询方法可能是非常有用的后备解决方案。它有时被称为“通用解决方案”,因为它适用于所有数据库。这种方法的另一个好处是它是最易与 Round() 等函数合并使用。以下是我们需要添加到查询中的内容:

count(*) * 100.0 / (select count(*) from <YourTable>)

在 SQL 中计算总行数的百分比_第4张图片

使用公用表表达式(CTE)
With common_table_expression 子句指定一个临时命名结果集,称为公用表表达式(CTE)。然后,我们可以从临时结果集中进行选择,以将更多函数应用于检索到的字段。在我们的例子中,我们可以将 sum() 函数应用于计数以得到百分比:

在 SQL 中计算总行数的百分比_第5张图片
这种方法效率最低,因为 CTE 基本上针对内部(初始)查询的结果运行第二个查询。话虽如此,有时你可能需要使用 CTE 执行无法一次轻松完成的额外处理。

你可能感兴趣的:(java,sql,数据库,mysql)