首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 循序漸進 (19):DISTINCT 去除重複列與 ORDER BY 排序

     編輯:關於SqlServer

問題:重複資料列

查詢「所有賣過古董的賣家 ID 與姓名」,若賣家賣多件,同一賣家會出現多列。

解決方案:DISTINCT 關鍵字

SELECT DISTINCT SELLERID, OWNERLASTNAME, OWNERFIRSTNAME
FROM ANTIQUES, ANTIQUEOWNERS
WHERE SELLERID = OWNERID
ORDER BY OWNERLASTNAME, OWNERFIRSTNAME, OWNERID;

關鍵點

  • DISTINCT 作用於 整列:指定欄位組合完全相同才視為重複
  • SELLERID 是 ANTIQUEOWNERS 的外鍵,確保只列出有效賣家
  • ORDER BY 多欄位排序:姓氏 → 名字 → ID,輸出穩定可預期

結果

每位賣家僅出現一列,依姓名字母序排列。

延伸:DISTINCT ON (PostgreSQL) / ROW_NUMBER() 通用做法

若需「每群組第一列」而非完全去重,標準 SQL 可用視窗函數:

SELECT * FROM (
    SELECT SELLERID, OWNERLASTNAME, OWNERFIRSTNAME,
           ROW_NUMBER() OVER (PARTITION BY SELLERID ORDER BY OWNERLASTNAME) rn
    FROM ANTIQUES, ANTIQUEOWNERS
    WHERE SELLERID = OWNERID
) t WHERE rn = 1;

效能提示

  • DISTINCT 需排序/雜湊去重,大結果集有成本
  • 若已知資料唯一(如主鍵查詢),勿加 DISTINCT
  • 搭配索引覆蓋可避免排序操作
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved