簡體   English   中英

Oracle - 別名列上的 SQL Distinct Select

[英]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 列名上編寫選擇查詢?

您不能在別名列名上編寫選擇查詢。

別名對以下情況很有用:

  1. 一個查詢涉及多個表
  2. 查詢中使用的函數
  3. 列名很大或不太可讀
  4. 兩列或更多列組合在一起

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_numberdense_rank可能更合適,或者有keep子句。 不過,這取決於您要嘗試做什么。

或者,如果您想要name字段並且現在根本不顯示surname ,那么只需:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM