【问题标题】:Semester wise results and display cgpa count by range学期明智的结果并按范围显示 cgpa 计数
【发布时间】:2022-01-11 09:40:08
【问题描述】:

如何按学期和年级范围计算年级计数。

我有如下表格、字段和数据:

SEMETSER

SEMISTER_NO NAME
1 FIRST
2 SECOND

STUDENT_SEMETSER

STUDENT_NO SEMESTER_NO SCORE
1 1 9.8
2 1 9.2
3 1 8.8
4 1 7.8
5 1 7.5
6 1 7.2
7 2 8.8
8 2 8.2
9 2 8.8
10 2 6.8
11 2 6.5
12 2 6.2

预期结果:

SEMESTER_NO SCORE 10-9 SCORE 9-8 8-7 7-6 6-5 5-4
1 2 1 3 0 0 0
2 0 3 0 2 0 0

【问题讨论】:

  • 如果我的理解是正确的,在SEMESTER_NO 2中的score 7-6一定是3
  • 为了您自己的理智,请修正错别字:它是 semester,而不是“semister”或“SEMETSER"

标签: java sql oracle


【解决方案1】:

使用CASE-WHENPIVOT 是其中一种选择:

SELECT *
FROM 
(
  SELECT semester_no,
          CASE 
            WHEN SCORE>= 9 and SCORE<=10 THEN 'Score 10-9'
            WHEN SCORE>= 8 and SCORE<9 THEN 'Score 9-8'
            WHEN SCORE>= 7 and SCORE<8 THEN 'Score 8-7'
            WHEN SCORE>= 6 and SCORE<7 THEN 'Score 7-6'
            WHEN SCORE>= 5 and SCORE<6 THEN 'Score 6-5'
            WHEN SCORE>= 4 and SCORE<5 THEN 'Score 5-4'
          END AS score_cat
   FROM student_semester
)
PIVOT 
(
   COUNT(score_cat)
   FOR score_cat IN ('Score 10-9','Score 9-8','Score 8-7','Score 7-6','Score 6-5','Score 5-4')
)
ORDER BY semester_no

CASE 语句会将分数分类到不同的桶中(根据您的需要进行修改)PIVOT 语句会将数据转换为所需的级别。

DEMO

【讨论】:

  • 你真的需要检查&lt;=10吗?当您之前在该行中处理了&gt;=9 时,您无需再次检查“>=8”行中的&lt;9
  • 感谢您的意见。可以避免检查&lt;9 和其他人。同意你!但是,我觉得我们仍然可以在第一个条件下检查&lt;=10,因为我们可能不知道分数的实际上限。你的想法?
  • 预计分数在1-10之间,但在这种情况下我可能会弄错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
相关资源
最近更新 更多