繁体   English   中英

sql分组成绩

sql grouping grades

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个科目表如下:

id  Subject Grade   Ext
100 Math    6       +
100 Science 4       -
100 Hist    3       
100 Geo     2       +
100 CompSi  1       

我期望班级中每个学生的输出(id = 100)如下:

Grade   Ext StudentGrade
6       +       1
6               0
6       -       0
5       +       0
5               0
5       -       0
4       +       0
4               0
4       -       1
3       +       0
3               1
3       -       0
2       +       1
2               0
2       -       0
1       +       0
1               1
1       -       0

我希望这在 oracle/sql 而不是 UI 上完成。 任何输入请。

3 个回复

你可以做这样的事情。 在 WITH 子句中,我为 1 到 6 的等级以及 +、null 和 - 的“扩展”生成了两个小的“帮助器”表(实际上是内联视图)。 在“扩展”视图中,我还创建了一个“排序”列,用于对最终输出进行排序(如果您想知道我为什么包含它)。

同样在 WITH 子句中,我包含了示例数据 - 您必须删除它,而是在主查询中使用您的实际表名。

这个想法是交叉连接“成绩”和“扩展”,并将结果左外连接到您的输入数据。 从输入数据中计算成绩,按成绩和扩展名分组,并在过滤所需的 id 之后。 连接条件中的decode是必需的,因为对于扩展,我们希望将null视为等于null - decode做得很好。

with
  sample_inputs (id, subject, grade, ext) as (
    select 100, 'Math'   , 6, '+'  from dual union all
    select 100, 'Science', 4, '-'  from dual union all
    select 100, 'Hist'   , 3, null from dual union all
    select 100, 'Geo'    , 2, '+'  from dual union all
    select 100, 'CompSi' , 1, null from dual
  )
, g (grade) as (select level from dual connect by level <= 6)
, e (ord, ext) as (
    select 1, '+'  from dual union all
    select 2, null from dual union all
    select 3, '-'  from dual
  )
select g.grade, e.ext, count(t.grade) as studentgrade
from   g cross join e left outer join sample_inputs t
          on  t.grade = g.grade and decode(t.ext, e.ext, 0) = 0
          and t.id = 100  -- change this as needed!
group  by g.grade, e.ext, e.ord
order  by g.grade desc, e.ord
;

输出:

GRADE EXT STUDENTGRADE
----- --- ------------
    6 +              1
    6                0
    6 -              0
    5 +              0
    5                0
    5 -              0
    4 +              0
    4                0
    4 -              1
    3 +              0
    3                1
    3 -              0
    2 +              1
    2                0
    2 -              0
    1 +              0
    1                1
    1 -              0

您应该先生成行,然后再将它们与您的表连接,如下所示。 我在这里使用 with 子句在您的示例中生成 18 行。

with rws (grade, ext) as (
select ceil(level/3), decode(mod(level, 3), 0, '+', 1, '-', null)
from dual 
connect by level <= 3 * 6
)
select r.grade, r.ext, nvl2(t.Ext, 1, 0) studentGrade 
from rws r
left join your_table t
on t.Grade = r.Grade and decode(t.Ext, r.Ext, 1, 0) = 1
order by 1 desc, decode(r.ext, null, 2, '-', 3, '+', 1)

看起来您希望在加入学生和科目时填充稀疏数据。

从 Oracle 10g 开始,正确的方法是使用“分区外连接”。

该文档有示例。

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6

1 SQL将行分组成对

我正在尝试将某些唯一标识符(uid)添加到由成对的行组成的分区中,即,在大小为2行的窗口分区中为(identifier1,identifier2)的每两行生成一些uid / tag。 因此,例如,ID X的前两行将获取uid A,同一ID的后两行将获取uid B,并且如果ID X的分区中仅 ...

2 SQL分组依据并计入各科目的成绩总计

我还没有找到一个完全符合我想要的答案的答案。 老实说,我不太确定该怎么做! 我有一张表格,列出各学科的学生取得的成绩: 我想要一张表格,该表格显示每个科目的成绩分布情况,以及每个授予的成绩总数: 到目前为止,我的查询是: 任何意见或建议,将不胜感激。 谢 ...

2014-09-19 14:35:15 2 812   sql
3 加入后的小组成绩?

因此,我有三个表。 Movies , movies_genres genres和genres 。 我想按其ID取得一部电影,并且也将其类型加入到结果中。 我设法加入了结果,但是没有显示出来。 我不确定我要问的事情是否可能。 这是我的查询: 该查询是由Codeigniters ...

4 与MySQL分组的最佳成绩

我有上表。 我想获得每位候选人的第三高分。 我的输出应该是 通常,我想使查询更灵活,以使每个候选项获得第n个最高分(不同的数据)。 我知道在mysql中,要获取第n个最高的数据,我可以order by desc limit n-1,n进行order by desc limit n ...

2017-12-24 21:40:18 2 38   mysql
5 T-SQL返回组成总和的未分组记录

使用SQL Server 2008:我正在尝试编写过去一周内发生的,超过1000美元的客户交易报告。 我有以下SQL查询,该查询将为我提供正确的记录,但显然会聚合结果: 结果如下: 但是,我需要获取包含这些汇总结果的单个记录,但是显然不能忽略GROUP BY语句。 也许我要实 ...

6 SQL获得成绩

我正在创建一个应用程序来存储测试。 下面简化了数据库架构 我需要一个查询来获取每个学生的成绩,考虑到如果该学生有第二个考试(这是一种检索),则返回的分数必须是第二个考试中的一个(而不是第一个)。 因此,对于该示例,结果集应为 我写了一个sql,但是没有用。 因为它不会获 ...

2014-11-06 10:52:28 2 63   sql
8 仅针对缺少SQL成绩的学生插入成绩

我刚接触SQL并遇到以下问题:我必须检查每个学生是否具有所有年级(1-10)。 如果学生缺少成绩,我必须插入。 但是任何学生都不应有相同年级的副本-他们应该只复制一次。 我要做的就是显示所有学生的成绩: ...

9 SQL选择学生的平均成绩

我正在学习sql,对此有一点麻烦,我需要每个学科的每个学生的平均成绩。 我做了下表。 即时通讯使用这些表链接它们: 任何帮助表示赞赏 我正在努力 我得到下表 但是如果我做AVG(grades.value)我只会得到第一行 ...

10 查询获取学生和成绩 SQL

我有一个学生表 Student(LRN,fName,lName,levelID) 和一个成绩表 GRADE(subjectID,grade,levelID,LRN,TimeAdded) 我想向所有学生显示他们所有科目的在线成绩。 我厌倦了这个查询,但我得到了这个结果。 结果:查询结果 ...

2017-12-12 20:23:22 3 874   mysql/ sql
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM