当前位置: 首页 > 面试题库 >

不能在同一查询中使用group by和over(partition by)吗?

尉迟远
2023-03-14
问题内容

我有一个myTable3列的表格。col_1INTEGER,其他2列是DOUBLE。例如,col_1={1, 2}, col_2={0.1, 0.2, 0.3}。中的每个元素col_1均由中的所有值组成,col_2col_2具有中的每个元素重复的值col_1。第三列可以具有任何值,如下所示:

    col_1 | col_2 | Value
    ----------------------
    1     |  0.1  |  1.0
    1     |  0.2  |  2.0
    1     |  0.2  |  3.0
    1     |  0.3  |  4.0
    1     |  0.3  |  5.0
    2     |  0.1  |  6.0
    2     |  0.1  |  7.0
    2     |  0.1  |  8.0
    2     |  0.2  |  9.0
    2     |  0.3  |  10.0

我想要的是在SUM()Valuecol_1和分组的列分区上使用聚合函数col_2。上表应如下所示:

    col_1 | col_2 | sum_value
    ----------------------
    1     |  0.1  |  1.0
    1     |  0.2  |  5.0
    1     |  0.3  |  9.0
    2     |  0.1  |  21.0
    2     |  0.2  |  9.0
    2     |  0.3  |  10.0

我尝试了以下SQL查询:

SELECT col_1, col_2, sum(Value) over(partition by col_1) as sum_value
from myTable
GROUP BY col_1, col_2

但是在DB2 v10.5上,它给出了以下错误:

SQL0119N  An expression starting with "Value" specified in a SELECT 
clause, HAVING clause, or ORDER BY clause is not specified in the 
GROUP BY clause or it is in a SELECT clause, HAVING clause, or ORDER 
BY clause with a column function and no GROUP BY clause is specified.

您能指出什么错吗?我对SQL没有太多的经验。

谢谢你。


问题答案:

我找到了解决方案。

我不需要使用,OVER(PARTITION BY col_1)因为它已经在GROUP BY子句中。因此,以下查询为我提供了正确的答案:

SELECT col_1, col_2, sum(Value) as sum_value
from myTable GROUP BY col_1, col_2

由于我已经将wrtcol_1col_2

戴夫,谢谢,我从您的帖子中得到了这个主意。



 类似资料:
  • 1)使用的第一个查询...大约用了23秒 目前我修改了查询..这需要大约9秒 我不确定要做的表演是什么?我希望这个查询是快速的..我尝试索引rid和id,但这仍然使查询变得更糟。 下面是表格的详细信息 mza_movie_upload MZA_Movie_Statics

  • 我需要将以下查询转换为hibernate条件查询。请帮忙 由于投票表上的复合主键,我用@Embeddable分隔了主键,所以后面的createQuery不起作用 和可嵌入对象 请建议一个更好的方法。

  • 我有下面的模式, 学生(名字、姓氏、SID) 已注册(学生ID、课程ID) 课程(CID、课程名称、系) 我需要找出哪些学生上的课比课多。和位位于类别中。我有以下查询,其中列出了所有注册课程的学生以及他们注册了多少课程。 不太确定如何将这个数字与那些注册信息技术课程的人进行比较。

  • 问题内容: 查询代码和查询: 返回一个空值。 通过基本调试,我发现了它的第三个绑定,即问题 我尝试了各种变体,其中最明智的似乎是在使用: 但这不起作用,因为我错过了连接字符串的任一侧,所以我尝试: 但我似乎无法找到一种方法使它们起作用。 我想念什么? 问题答案: 首先,占位符(那些占位符)仅用于 列值 ,而不用于表名,列名,SQL函数/子句等。最好改用。其次,你应该 不 引用占位符一样,它只会ma

  • 本文向大家介绍Oracle查询中OVER (PARTITION BY ..)用法,包括了Oracle查询中OVER (PARTITION BY ..)用法的使用技巧和注意事项,需要的朋友参考一下 为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的。 注:标题中的红色order by是说明在使用该方法的时候必须要带上order by。 一、rank()/dense_ran

  • 问题内容: 我正在尝试用另一列分组的该列的最大值更新表中的一列。 例如,假设我们有一个名为transactions的表,其中有两列:和。无论出于何种原因,我们都希望将其设置为等于每个值的最大值。 我很沮丧并且不擅长在SQL中执行这样的操作,但是到目前为止,这是我所拥有的: 问题答案: 除了@Gordon已经指出的语法错误之外,通常最好 排除空更新 : 无需更改任何内容就无需编写新的行版本(几乎需要