首页 > 解决方案 > SQL 查询从 10 个布尔列计算百分比真

问题描述

我有一个名为“Grades”的表,其中包含 10 个布尔列,称为 PassA、PassB、PassC、PassD 等。我正在尝试进行查询,以提供每列中“真”的百分比?

ID   PassA  PassB   PassC
1      x      x       
2             x       x
3      x
4             x

预期的查询结果(或等价物):

PassA  PassB   PassC
50%    75%     25%

它是一个 Access SQL 语句。

我似乎可以用一列来做到这一点(见下文),但不想这样做会在 1 个查询中的所有列。所有的想法都非常受欢迎?谢谢!

SELECT PassA, (count(PassA(*)*100 / (Select count(*)FROM Grades} AS Total
FROM Grades
Group by PassA; 

标签: sqlms-access

解决方案


使用条件聚合:

SELECT
  ROUND(100.0 * AVG(IIF(PassA, 1, 0)), 2) & '%' AS PercentA,
  ROUND(100.0 * AVG(IIF(PassB, 1, 0)), 2) & '%' AS PercentB,
  ROUND(100.0 * AVG(IIF(PassC, 1, 0)), 2) & '%' AS PercentC
FROM Grades

对于 MS Access,这也可以:

SELECT
  ROUND(100.0 * AVG(-PassA), 2) & '%' AS PercentA,
  ROUND(100.0 * AVG(-PassB), 2) & '%' AS PercentB,
  ROUND(100.0 * AVG(-PassC), 2) & '%' AS PercentC
FROM Grades

因为存储TRUE-1FALSE。 结果:0

PercentA    PercentB    PercentC
50%         75%         25%

推荐阅读