【发布时间】:2015-07-10 21:10:16
【问题描述】:
在 Oracle 中,我需要对显示“重复”值(相对于 table1 中的 timeInmillis 列)的连接查询中的列 (timeInmillis) 求平均值。我需要保留连接中的值,但要得到正确的平均值。
我正在尝试做这样的事情:
select AVG(SUBSTR(DISTINCT(concat(id1,timeInMillis)),LENGTH(id1)+1,LENGTH(CONCAT(id1,timeInMillis)))), someColumn, otherColumn
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id1 = t2.id1 group by somestuff,someotherStuff;
如果我尝试这样做,我会得到:
ORA-00936:缺少表达式
这是一个例子:
表1:
id1 timeInMillis otherColumn
1 5 X
2 15 X
表2:
id2 id1 otherColumn
--------------------
1 1 X
2 1 X
3 2 X
从我的加入中,我得到一个这样的结果集:
id1 id2 timeInmillis moreColumns
--------------------------------
1 1 5 X
1 2 5 X
2 3 15 X
我需要获得 5 和 15 的平均值(具有不同的 id1),但我无法修改 sql 的 where 部分(因为我得到了其他值)
My result should be:
AVG(TIMEINMILLIS) otherResults
----------------------------------
10 'whatever'
提前致谢。
【问题讨论】:
-
DISTINCT 不是列上的函数,它适用于整个选定的行。您能否提供示例数据和预期结果,我们也许会了解您正在尝试做什么。
-
解释起来有点困难,但我确实编辑了这个问题。
-
我还是不明白。 “5 和 15 的平均值(具有不同的 id1)”? 15和ID 1有什么关系?为什么还有两个ID?在您的示例查询中,您连接两个表,它们的 ID 匹配;在您的示例数据中,您有具有 不同 ID 的记录。您能否再次编辑您的问题并告诉我们您要做什么?
-
假设 table1 有 id1 和 timeInMillis,table2 有 id2、id1。我们从连接中得到这样的结果。因此,当 id1 与我的结果集不同时,我需要以毫秒为单位获取平均时间
-
好吧,我想我越来越近了 :-) 您只想查看 ID1。对于 ID1 = 1,您希望获得 (5,5) 的平均值,即 5。对于 ID 2,您希望获得 15 的平均值,当然是 15。或者你想得到 (5,5,15) 的平均值吗?然后,您希望结果中有多少行?所有三个,每个都在列中显示额外的平均值?还是只有 2 个,一个用于 ID1=1,一个用于 ID1=2?
标签: sql oracle distinct substr