我选择了像
这样的别名列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)
也不起作用。
答案 0 :(得分:3)
如何在ALIASED列名上编写选择查询?
您无法在别名列名称上编写选择查询。
别名对以下内容非常有用:
答案 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_number
或dense_rank
可能更合适,或者存在keep
子句。这取决于你想要做什么。
或者,如果您仅想要name
字段,而现在根本没有显示surname
,那么只需:
select distinct t.name
from table t
where ... ;