[英]Oracle - SQL Distinct Select on aliased columns
我正在選擇帶有別名的列,例如:
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)
也不起作用。
我應該如何在 ALIASED 列名上編寫選擇查詢?
您不能在別名列名上編寫選擇查詢。
別名對以下情況很有用:
在SELECT
子句的第一列上使用DISTINCT
關鍵字。 例如,下面的代碼適用於我們想要在特定列上應用 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
Distinct 不是函數,而是select
語句中的一個子句:
如果您希望數據庫僅返回所選的每組重復行的一個副本,請指定 DISTINCT 或 UNIQUE。 這兩個關鍵字是同義詞。 重復行是那些與選擇列表中的每個表達式具有匹配值的行。
您不能將distinct
應用於查詢中的單個表達式(列),只能應用於整行。
您想在結果集中包含什么並不是很清楚。 你是在暗示你有多個surname
值的相同name
; 如果您只顯示每個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 ... ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.