我在哪里把distinct放在我的代码中?

时间:2013-05-12 01:36:10

标签: sql function distinct

我有以下sql代码:

select upper(regexp_substr(street1, '\S+$'))

但是我不知道我应该在哪里放置distinct关键字以在表中包含唯一值,因为我打印出许多重复值。


编辑 - 来自以下评论。

完成查询(错误):

select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) 
from HELENS_DATA 
order by REGEXP_SUBSTR(STREET1, '\S+$') asc 

错误讯息:

  

ORA-01791:不是SELECTed表达式01791. 00000 - “不是SELECTed表达式”*原因:*操作:行错误:3列:24

完成查询(有效):

select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$'))
from HELENS_DATA
order by UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) desc;

请注意,初始查询试图通过使用UPPer()函数将查询值更改为高位,但我怎么错误地忽略了ORDER BY子句中的函数,这不是'DISTINCT'的错误。

5 个答案:

答案 0 :(得分:1)

distinct总是在select之后出现:

select distinct upper...

答案 1 :(得分:0)

你试过了吗?

SELECT DISTINCT upper(...)AS'Field Name'

如果您将正在执行此操作的字段命名为可能有效,并允许您使用DISTINCT。

答案 2 :(得分:0)

当你有DISTINCT函数时,UPPER失败很有意思。您可以尝试使用子查询来解决它:

SELECT DISTINCT Ending
FROM (select upper(regexp_substr(street1, '\S+$')) Ending) A

子查询确实不应该是必要的,这应该也可以,因为chue x推荐。

SELECT DISTINCT upper(regexp_substr(street1, '\S+$'))

答案 3 :(得分:0)

结束:

最初我已经在oracle数据库中运行代码,如下面的代码

完成查询(错误):

select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) 
from HELENS_DATA 
order by REGEXP_SUBSTR(STREET1, '\S+$') asc;

结果我收到以下错误消息:

ORA-01791: not a SELECTed expression 01791. 00000 - "not a SELECTed expression"  
*Cause: *Action: Error at Line: 3 Column: 24

上面的答案帮助我找出了我忽略的错误,以下代码是完成的SQL查询,它运行正常。

完成查询(有效):

select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$'))
from HELENS_DATA
order by UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) desc;

请注意,初始查询试图通过使用UPPer()函数将查询值更改为高位,但我怎么错误地忽略了ORDER BY子句中的函数,这不是'DISTINCT'的错误。

结论是,无论SELECT子句有什么参数,其他可能的条款,例如:在哪里,ORDER BY ...等也应该具有相同的模式或相同的值。

感谢大家。

答案 4 :(得分:0)

您不必重复ORDER BY子句中的代码。无论您在SELECT列表中定义了哪些别名,都可以在ORDER BY中使用:

SELECT DISTINCT 
    UPPER(REGEXP_SUBSTR(street1, '\S+$'))  AS street1_upper 
FROM
    HELENS_DATA
ORDER BY
    street1_upper DESC;