2

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

select t.name, t.surname from table t where some conditions...;

现在我想在特定列上添加不同的功能。所以,如果我选择这个没有别名,它看起来像:

select distinct(name), surname from table;

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

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

4

3 回答 3

3

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

您不能在别名列名上编写选择查询。

别名可用于以下情况:

  1. 一个查询涉及多个表
  2. 查询中使用了函数
  3. 列名很大或不太可读
  4. 两列或多列组合在一起
于 2013-07-31T09:24:28.993 回答
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
于 2013-07-31T09:24:39.513 回答
0

Distinct 不是一个函数,它是语句中的一个子句select

如果您希望数据库只返回每组选定重复行的一个副本,请指定 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 ... ;
于 2013-07-31T09:12:37.103 回答