【发布时间】:2011-03-07 21:52:37
【问题描述】:
我正在尝试在订购后对查询进行分组,但是,在 sql(我使用 DB2)中,我们无法在订购后进行分组,但如果我在分组更改分组后订购。这样做的原因是因为它基于多个属性而不只是 1 分组(我只需要按 1 个属性分组,但由于我们需要匹配 select 语句,所以我必须按多个属性分组。
我尝试使用“with”创建一个虚拟表并尝试在其中排序,但 DB2 说我只能在 with 属性中分组而不是排序
from 语句也是如此。我尝试在 from 属性内进行嵌套查询,该查询返回有序结果,但 DB2 限制我们在 from 属性内进行排序(只允许分组)
所以我不知道该怎么做,订购后如何分组?
这是一个示例表:
口袋妖怪:
id name age
3 pikachu 1
2bulbasure 3
1 charazard 2
11 pikachu 10
(在口袋妖怪表中)
主键 ID,名称
外键(名称)引用 pokedex(名称))
图鉴:
身份状态
皮卡丘
charazard 疱疹
打嗝
现在我要做的是列出口袋妖怪表:
按年龄、姓名排序
但在那之后,我希望结果按他们的 id 分组,但是我选择他们的 id、姓名、年龄和状态,所以在分组时我必须匹配这些属性:
GROUP BY pokedex.id 年龄状态.....
所以问题是如果我在分组后订购它会破坏 pokedex.id 的分组,因为它也按状态和其他属性分组
只是一个例子,并没有真正构建任何与口袋妖怪相关的东西:P
【问题讨论】:
-
一些有关您的数据/结构的信息将大大增加获得有用答案的机会
-
Group by 通常在 order by 之前完成。您能否将您当前的查询粘贴给我们以提供帮助。
-
在分组之前订购是没有意义的。 GROUP BY 不依赖于任何固有顺序,除非您使用的是 MySQL(标记),但您的描述是 DB2。 * Mysql 是另一回事,允许非聚合与 GROUP BY 混合
-
但是您对 group by 的限制是它必须与您的 select 语句中的相同属性匹配,因此如果先 group by 然后 order by,由于某些分组属性上的常见分组,该组将中断。
-
@Richard aka cybekiwi 如果说您有一个根据实际顺序过滤数据的位置,这可能是有道理的。 (或某种限制)。