2009-10-29 29 views
41

選擇唯一的記錄。當我執行 「SELECT * FROM表」 我得到的結果如下圖所示:如何通過SQL

1 item1 data1 
2 item1 data2 
3 item2 data3 
4 item3 data4 

正如你所看到的,也有來自COLUMN2 DUP記錄(ITEM1的dupped)。那麼我怎樣才能得到這樣的結果:

1 item1 data1 
2 item2 data3 
3 item3 data4 

只有一個記錄是從副本,連同其餘的唯一記錄返回。

回答

58

您可以使用SELECT DISTINCTGROUP BY來做到這一點。如果你想使用一些聚合函數像COUNT()SUM()

SELECT a, b, count(*) 
FROM table_c 
GROUP BY a, b 

SELECT a, b, sum(d) 
FROM table_c 
GROUP BY a, b 
+0

難道是答案其實是錯的嗎? DISTINCT應用於所有選定的列(至少在DB2上),該列仍將在單個列中返回重複值。 – Konstantin 2018-01-04 10:46:53

19

如果您只需要刪除重複再使用DISTINCT

SELECT DISTINCT a, c 
FROM table_c 

SELECT a, b 
FROM table_c 
GROUP BY a, b 

GROUP BY會更有幫助。 GROUP BY應該用來聚集操作符適用於每個組

GROUP BY v DISTINCT

6

這要看rown要返回每一個獨特的項目。您的數據似乎表明在這種情況下SQL Server的最小數據值。

SELECT item, min(data) 
FROM table 
GROUP BY item 
1

我發現如果因爲任何原因無法使用DISTINCT,那麼GROUP BY將會起作用。

0

爲了讓所有在你的結果,你需要放置的東西作爲列:

SELECT distinct a, Table.* FROM Table 

它將把一個爲第一列,其餘的將是所有列在同一順序你的定義。這是,將重複列a

+1

你確定嗎?我在w3schools上試過這個,它返回的結果與SELECT *相同,除了第一列是 – Freakishly 2015-07-01 21:31:52

+0

@Freakishly是的,這正是它在我的答案中所說的:/ – htafoya 2015-07-17 00:36:24

+0

這是行不通的,你不能選擇*之後的獨特之處(你會得到一個1064錯誤 - 在你的SQL語法錯誤) – 2017-05-31 08:47:48

-3

選擇Eff_st 從 ( 選擇EFF_ST,ROW_NUMBER()以上(PARTITION BY eff_st)XYZ - 從ABC.CODE_DIM

) 其中XYZ = 1 爲了通過EFF_ST取第一行5只

0

只是使用內部連接,因爲group by將不會與多列表示不包含在聚合函數中。

SELECT a.* 
FROM yourtable a 
INNER JOIN 
    (SELECT yourcolumn, 
    MIN(id) as id 
    FROM yourtable 
    GROUP BY yourcolumn 
) AS b 
    ON a.yourcolumn= b.yourcolumn 
    AND a.id = b.id; 
+0

這是一個不同問題的答案,可能是一個應該用[tag:greatest-n-per-group]標記的標籤。 – 2018-01-03 08:28:42