Oracle-对别名列执行SQL Distinct Select

Oracle-对别名列执行SQL Distinct Select,sql,oracle,select,distinct,alias,Sql,Oracle,Select,Distinct,Alias,我正在选择具有别名的列,如: 从表t中选择t.name、t.姓氏,其中有一些条件。。。; 现在我想在特定列上添加distinct函数。因此,如果我选择此选项而不使用别名,它将看起来像: 从表中选择distinct(名称)、姓氏; 但是,如果我想用别名列名编写select查询,该怎么办 select distinct(t.name)不起作用,select t.distinct(name)也不起作用。distinct不是一个函数,它是一个: 如果希望数据库只返回一个,请指定DISTINCT或UN

我正在选择具有别名的列,如:

从表t中选择t.name、t.姓氏,其中有一些条件。。。;
现在我想在特定列上添加distinct函数。因此,如果我选择此选项而不使用别名,它将看起来像:

从表中选择distinct(名称)、姓氏;
但是,如果我想用别名列名编写select查询,该怎么办


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

distinct不是一个函数,它是一个:

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

不能对查询中的单个表达式(列)应用
distinct
,只能跨整行应用

你想在结果集中得到什么并不十分清楚。你的意思是你有相同的
名字
,有多个
姓氏
值;如果只显示每个
名称
,则需要确定要显示的
姓氏
(和其他字段)。一个选项是分组并拾取最小值或最大值:

select t.name, min(t.surname)
from table t
where ...
group by t.name;
如果实际查询中有多个列,则使用分析的
行数
密集列
可能更合适,或者使用
保留
子句。这取决于你想做什么

或者,如果您只需要
姓名
字段,而现在根本不显示
姓氏
,那么只需:

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

Distinct不是一个函数,它是一个:

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

不能对查询中的单个表达式(列)应用
distinct
,只能跨整行应用

你想在结果集中得到什么并不十分清楚。你的意思是你有相同的
名字
,有多个
姓氏
值;如果只显示每个
名称
,则需要确定要显示的
姓氏
(和其他字段)。一个选项是分组并拾取最小值或最大值:

select t.name, min(t.surname)
from table t
where ...
group by t.name;
如果实际查询中有多个列,则使用分析的
行数
密集列
可能更合适,或者使用
保留
子句。这取决于你想做什么

或者,如果您只需要
姓名
字段,而现在根本不显示
姓氏
,那么只需:

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

如何编写别名列名的select查询

不能对别名的列名编写select查询

别名在以下方面很有用:

  • 查询中涉及多个表
  • 在查询中使用函数
  • 列名太大或可读性不强
  • 两列或多列组合在一起

  • 如何编写别名列名的select查询

    不能对别名的列名编写select查询

    别名在以下方面很有用:

  • 查询中涉及多个表
  • 在查询中使用函数
  • 列名太大或可读性不强
  • 两列或多列组合在一起

  • SELECT
    子句的第一列上使用
    DISTINCT
    关键字。例如,下面的代码适用于我们希望在特定列上应用DISTINCT的地方。在第一种情况下,特定列为名称,在后一种情况下,特定列为姓氏

    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
    

    SELECT
    子句的第一列上使用
    DISTINCT
    关键字。例如,下面的代码适用于我们希望在特定列上应用DISTINCT的地方。在第一种情况下,特定列为名称,在后一种情况下,特定列为姓氏

    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
    

    不能对特定列使用distinct。distinct始终适用于整行。你能举一个例子来说明你想要达到的结果吗?事实上,它的别名是不相关的
    选择distinct(t.name)
    有效,但括号是多余的,与
    选择distinct t.name
    相同。如果查询没有给出您期望的结果,或者出现错误,则需要提供更多详细信息,可能需要使用更具体的示例。您不能在特定列上使用distinct。distinct始终适用于整行。你能举一个例子来说明你想要达到的结果吗?事实上,它的别名是不相关的
    选择distinct(t.name)
    有效,但括号是多余的,与
    选择distinct t.name
    相同。如果查询没有给出您期望的结果,或者出现错误,您需要提供更多详细信息,可能需要一个更具体的示例。我不确定“选择别名列上的查询”是什么意思。。。正如您所说,您可以为这些列添加别名,OP已经在这样做了。你能解释一下你的意思吗?是的,这实际上并不准确,但我不想因为-1代表成本而否决投票我不确定“选择别名列查询”是什么意思。。。正如您所说,您可以为这些列添加别名,OP已经在这样做了。你能解释一下你的意思吗?是的,这实际上并不准确,但我不想投反对票,因为-1代表costDistinct始终应用于列表中的所有表达式。所有三个查询都将给出相同的结果,而第三个查询只会执行不必要的子选择和额外的排序…是的,绝对正确所有三个查询都将给出相同的结果。我把注意力放在使用上