【问题标题】:SQL Group By Percentage IncrementsSQL 组按百分比增量
【发布时间】:2013-10-08 16:57:09
【问题描述】:

我有一个包含测试分数列表的表格,例如 30 分。

我想通过计算分数在某个百分比范围内的人数来呈现数据。

例如:

Total   % Bracket
-----------------
5       95-100%
15      90-94%   
20      85-89%
17      80-84%
15      75-79%
etc

我想过先计算每个百分比括号所需的分数,然后以某种方式执行SUM(CASE ....,但我似乎迷失了方向。

【问题讨论】:

  • 你能分享一个预期结果的例子吗?
  • @Kuzgun 我有问题。我想统计某个百分比范围内的总人数
  • 您使用的是哪个数据库?
  • 谁的 SQL?甲骨文、SQL Server?
  • 抱歉是 MSSQL 2005

标签: sql sql-server-2005 group-by percentage


【解决方案1】:

您可以使用 CASE WHEN,但在这种情况下,您将错过记录数为 0 的间隔。所以你可以通过以下方式做到这一点:

select t2.start,t2.finish, count(t.score) from t
RIGHT JOIN 
(
select 0 as start, 4 as finish
union all
select 5 as start, 9 as finish
union all
select 10 as start, 14 as finish
union all
.......
union all
select 95 as start, 99 as finish  
) as t2 on t.score between t2.start and t2.finish

group by t2.start,t2.finish
order by  t2.start

Here is SQLFiddle demo

【讨论】:

    【解决方案2】:

    没有时间测试这个,但有些东西很长......

    select t.pcbracket as [% Bracket], count(*) as [NumWithMark]
    from (
      select case  
        when mark between 0 and 9 then ' 0- 9'
        when mark between 10 and 19 then '10-19'
        when mark between 20 and 29 then '20-29'
        when mark between 30 and 39 then '30-39'
        else '40-100' end as pcbracket
      from testresults) t
    group by t.pcbracket
    

    【讨论】:

    • 谢谢,这让我走上了正轨,只需将分数转换为百分比,然后使用您的方法。
    【解决方案3】:

    我会使用嵌套查询来解决这个问题。 内部查询我会使用简单的按百分比分组,然后在它之上我会用案例来指定百分比范围并获取输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      相关资源
      最近更新 更多