【问题标题】:Basic counting queries基本计数查询
【发布时间】:2015-04-23 07:35:54
【问题描述】:

我有 2 张桌子 classgrade

这是class 表中的示例行:

C_NAME....C_TIME...F_NAME..C_ROOM...SEMESTER
INSS300...M5:30....DWIGHT..219BC....FALL11
INSS300...T5:30....KEEN....216BC....FALL11
MKT300....M5:30....Lee.....112BC....SP11
MKT300....W5:30....Lee.....112BC....SP11
INSS421...T5:30....CORY....212BC....FALL11
FIN300....TH5:30...KEEN....219BC....FALL11
INSS300...W5:30....CORY....219BC....FALL11
INSS300...F5:30....CORY....216BC....FALL11
INSS422...F5:30....KEEN....219BC....FALL11

这是grade 表中的示例数据

S_NAME   C_NAME     G
LARRY....INSS300....B
LARRY....FIN300.....A
SONY.....INSS300....C
SONY.....INSS421....C
GRAY.....INSS300....C
GRAY.....INSS421....D
TRUDY....INSS300....B
DRUM.....INSS421....A
DRUM.....FIN300.....B
PURI.....INSS422....C
APPLE....INSS422....C
LARRY....INSS422....C
LARRY....INSS300....B
SONY.....INSS300....C
GRAY.....INSS300....C
TRUDY....INSS300....B

我必须回答的问题是:

假设这些表在您的帐户 Ordb002 中。你需要阅读 仅对您的组成员 Sally 的所有三个表的权限 帐户是 Ordb009。假设您已授予 Sally 读取权限 所有表。 Sally 想要计算成绩(即 A、B、c 等) 由教师和课程。为 SALLY 编写查询以获取此计数。

我想出了这个查询

select cla.f_name
     , gra.c_name
     , count(grade)
     , grade
from class1 cla 
   , grade1 gra
where cla.c_name=gra.c_name
group by cla.f_name
       , gra.c_name
       , grade
order by cla.f_name
       , gra.c_name;

这给了我以下输出:

F_NAME               C_NAME     COUNT(GRADE) G
-------------------- ---------- ------------ -
CORY                 INSS300               4 B
CORY                 INSS300               4 C
CORY                 INSS421               1 A
CORY                 INSS421               1 C
CORY                 INSS421               1 D
DWIGHT               INSS300               2 B
DWIGHT               INSS300               2 C
KEEN                 FIN300                1 A
KEEN                 FIN300                1 B
KEEN                 INSS300               2 B
KEEN                 INSS300               2 C
KEEN                 INSS422               3 C

当可能性只能是 2b 和 2c 时,我不知道为什么 4b 和 4c 会出现在输出的顶部。

有什么建议吗?

【问题讨论】:

    标签: sql oracle join count group-by


    【解决方案1】:

    这是因为在你的类表中你有 c_name 和 f_name 的“重复”行,例如:

    C_NAME    C_TIME   F_NAME  C_ROOM  SEMESTER
    --------- -------- ------- ------- --------  
    INSS300   W5:30    CORY    219BC   FALL11
    INSS300   F5:30    CORY    216BC   FALL11
    

    INSS300 成绩表中的每一行都将与这些行匹配,导致计数加倍。

    因此,如果您的成绩表也没有注明上课时间,您将不得不过滤您的课程表,以便每个 c_name 和 f_name 仅显示一行。

    或者,您可以先对成绩表中的行进行分组,然后将它们连接回班级表,如果您仍然需要显示这两行(尽管我认为这不是解决问题的正确方法你正在尝试解决)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2013-01-27
      • 1970-01-01
      相关资源
      最近更新 更多