首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据同一字段中的值计算百分比

根据同一字段中的值计算百分比
EN

Stack Overflow用户
提问于 2020-01-22 04:32:18
回答 2查看 30关注 0票数 2

我使用的是SQL Server。我有一个很好的汇总表,就像你在下面看到的那样。我想为每个熟练程度级别填充(创建) Pct字段。

代码语言:javascript
复制
| MeasurementScale | Grade | ProficiencyLevel | PL_Count | Pct |
|------------------|-------|------------------|----------|-----|
| Mathematics      |   6   | Did Not Meet     |    40    |     |
| Mathematics      |   6   | Approaches       |    86    |     |
| Mathematics      |   6   | Meets            |    83    |     |
| Mathematics      |   6   | Masters          |    42    |     |
| Mathematics      |   6   | Total            |   251    |     |

我基本上想要像下面这样的查询,我只是不知道如何编写它。

代码语言:javascript
复制
SELECT SchoolName
      ,MeasurementScale
      ,Grade
      ,ProficiencyLevel 
      ,PL_Count
      ,(PL_Count / (SELECT PL_Count FROM #PL_Summary1920 WHERE ProficiencyLevel = 'Total')) as Pct
FROM #PL_Summary1920
GROUP BY SchoolName
        ,MeasurementScale
        ,Grade
        ,ProficiencyLevel 
        ,PL_Count
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-22 05:16:27

代码语言:javascript
复制
SELECT  V1.*,
        CASE WHEN V2.PL_COUNT = 0 THEN 0
            ELSE V1.PL_Count * 1.0/ V2.PL_COUNT
        END AS  PCT
FROM    (
            SELECT  SchoolName,
                    MeasurementScale,
                    Grade,
                    ProficiencyLevel,
                    SUM(PL_Count)   AS  PL_Count
            FROM #PL_Summary1920 T1
            GROUP BY SchoolName
                    ,MeasurementScale
                    ,Grade
                    ,ProficiencyLevel 
        ) V1
LEFT JOIN   (
                SELECT  SchoolName,
                        MeasurementScale,
                        Grade,
                        SUM(TT.PL_Count)    AS  PL_COUNT
                FROM    #PL_Summary1920 TT
                WHERE   TT.ProficiencyLevel = 'Total'
                GROUP BY SchoolName,
                        MeasurementScale,
                        Grade
            ) V2 ON V2.SchoolName = V1.SchoolName
                    AND V2.MeasurementScale = V1.MeasurementScale
                    AND V2.Grade = V1.Grade
票数 1
EN

Stack Overflow用户

发布于 2020-01-22 04:49:43

试试这个:

代码语言:javascript
复制
SELECT MeasurementScale
  ,Grade
  ,ProficiencyLevel 
  ,PL_Count
  ,PL_Count * 1.0 / (SELECT PL_Count FROM #PL_Summary1920 WHERE ProficiencyLevel = 'Total') as Pct 
FROM #PL_Summary1920
GROUP BY SchoolName
    ,MeasurementScale
    ,Grade
    ,ProficiencyLevel 
    ,PL_Count

乘以1.0会强制将类型转换为decimal,以便正确显示百分比。它比进行强制转换或转换更干净。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59848809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档