SQL汇总-防止记录多次求和

SQL汇总-防止记录多次求和,sql,oracle11g,Sql,Oracle11g,首先,我想不出更好的题目了。对此表示歉意 因此,我正在编写一个查询,这里是(我认为)它将返回的内容,而无需聚合函数和分组方式。我以此为例,实际查询包含更多字段: SUBJ CLASSROOM CLASSROOM_CAPACITY A 1 25 B 2 50 C 3 60 A 2 50 A 1 25 <--Not actually du

首先,我想不出更好的题目了。对此表示歉意

因此,我正在编写一个查询,这里是(我认为)它将返回的内容,而无需聚合函数和分组方式。我以此为例,实际查询包含更多字段:

SUBJ   CLASSROOM   CLASSROOM_CAPACITY
A      1           25
B      2           50
C      3           60
A      2           50
A      1           25 <--Not actually duplicate
我正在尝试的是:

SELECT
SOME_FIELDS,
SUBJ,
CLASSROOM,
SUM(CLASSROOM_CAPACITY)
FROM
MYTABLE
WHERE .....
GROUP BY SOME_FIELDS, ROLLUP(SUBJ,CLASSROOM)
问题:
多亏了这些“看似重复”的记录,课堂容量被多次汇总。我如何防止这种情况?我这样做不对吗?
实际的查询要复杂得多,但我认为如果我能正确地处理这个问题,我可以将它应用到更大的查询中


PS:我知道如何使用
分组
获取文本“Total”而不是使用
汇总
的空白条目,这样您就可以跳过该部分。

您引入的基数有点不正确,当您排序时,汇总开始起作用。你说:

SUBJ  CLASSROOM  CLASSROOM_CAPACITY
A     1          25
等于:

SUBJ  CLASSROOM  CLASSROOM_CAPACITY
A     1          25
但是
某些\u字段每行可能不同。当您聚合到上面的列时,您希望
某些字段会发生什么情况

如果在本次查询中可以忽略这些记录,那么最好先查找
不同的
记录(即,包含唯一的sub、教室和教室容量元组的记录),然后在此数据集上进行汇总。以下查询实现了这一点:

WITH distinct_subj_classrm_capacity AS (
  SELECT DISTINCT
    subj
  , classroom
  , classroom_capacity
  FROM mytable
)
SELECT
  subj
, classroom
, SUM(classroom_capacity)
FROM distinct_subj_classrm_capacity
GROUP BY ROLLUP(subj, classroom)
如果您对ROLLUP提供的中断报告结果不感兴趣,并且只需要原始总数,则可以使用SUM的分析版本(有关Oracle分析函数的更多信息,请参见此处:)

这将以以下格式给出结果:

SUBJ  CLASSROOM_CAPACITY_PER_SUBJ
A     75
B     50
C     60

你怎么能得到总共135个呢?求和的值是多少,排除的值是多少?你怎么知道应该包含哪些值?我不明白。我想得到它。所列科目所有教室的教室容量之和为25+50+60。但这并不重要。我希望至少其他总数是正确的我知道这是一个坏例子。但是这是我能想到的最好的了..为什么你要从总数中排除
A,2,50
,而把它包括在
A
的小计中?我很难理解你的逻辑。你如何得到135-不是你认为SQL应该是什么,你需要能够首先用文字解释它(如果你愿意的话,是一个规范)。@AlexPoole:为混淆道歉。想象一下,我正在经营一所教授a、B、C科目的学校,我的学校大楼有3间教室。这三个教室为每一个科目安排了多个课程。当我只计算一次每个教室时,135表示的是教室总容量。或者你可以说它占用了我的大楼。然而,你可以忽略这段时间的135个总记录。我怎样才能把桌子的其余部分弄对呢?最多60个
谢谢<代码>某些字段
在汇总中相加,因为它们被包装在
SUM()
中。我将试验不同的方法。
WITH distinct_subj_classrm_capacity AS (
  SELECT DISTINCT
    subj
  , classroom
  , classroom_capacity
  FROM mytable
)
SELECT DISTINCT
  subj
, SUM(classroom_capacity) OVER (PARTITION BY subj) classroom_capacity_per_subj
FROM distinct_subj_classrm_capacity
SUBJ  CLASSROOM_CAPACITY_PER_SUBJ
A     75
B     50
C     60