Oracle - SQL Distinct选择别名

时间:2013-07-31 09:01:46

标签: oracle select distinct alias

我选择了像

这样的别名列
select t.name, t.surname from table t where some conditions...;

现在我想在特定列上添加 distinct 函数,因此,如果我在没有别名的情况下选择它,它将如下所示:

select distinct(name), surname from table;

但是如果我想用ALIASED列名来编写选择查询怎么办?

select distinct(t.name)不起作用,select t.distinct(name)也不起作用。

3 个答案:

答案 0 :(得分:3)

如何在ALIASED列名上编写选择查询?

您无法在别名列名称上编写选择查询。

别名对以下内容非常有用:

  1. 查询中涉及多个表
  2. 在查询中使用函数
  3. 列名很大或不太可读
  4. 两个或多个列组合在一起

答案 1 :(得分:1)

DISTINCT子句的第一列上使用SELECT关键字。例如,下面的代码适用于我们想要在特定列上应用DISTINCT的地方。在第一种情况下,特定列是NAME,在后一种情况下,特定列是SURNAME。

SELECT DISTINCT(T.NAME), T.SURNAME FROM TABLE T WHERE ...;
SELECT DISTINCT(T.SURNAME), T.NAME FROM TABLE T WHERE ...;

如果您希望DISTINCT应用于我们的两个列,请遵循以下技术:

SELECT DISTINCT(T.NAME), T.SURNAME FROM (
  SELECT DISTINCT(T.SURNAME), T.NAME FROM TABLE T WHERE ...;
) T

答案 2 :(得分:0)

Distinct不是一个函数,它是clause in the select statement

  

如果希望数据库只返回一个,请指定DISTINCT或UNIQUE   选中的每组重复行的副本。这两个关键字是   的代名词。重复行是每个行具有匹配值的行   表达式在选择列表中。

您不能将distinct应用于查询中的单个表达式(列),只能应用于整个行。

您想要在结果集中拥有什么并不是很清楚。您暗示您的name具有多个surname值;如果您只需要确定要显示的name(和其他字段),则只显示每个surname。一种选择是分组并选择最小值或最大值:

select t.name, min(t.surname)
from table t
where ...
group by t.name;

如果您的真实查询中有多列,则分析row_numberdense_rank可能更合适,或者存在keep子句。这取决于你想要做什么。

或者,如果您想要name字段,而现在根本没有显示surname,那么只需:

select distinct t.name
from table t
where ... ;