iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
Modern Web

工作後才知道的後端 30 件小事系列 第 2

如何用 SQL 去除重複資料 : Distint

簡單分享個簡單但之前不知道的 SQL,還是 PM 跟我講的 X)

情境

有哪些供應商有訂單狀態為 2 的訂單?

SELECT `product_id`, `supplier_name`, `order_status` FROM orders
WHERE `order_status` = 2;

得出以下結果

product_id supplier_name order_status
1 Apple 2
14 Apple 2
23 Apple 2
29 HTC 2
1235 Apple 2
1555 HTC 2
2345 Apple 2
3678 Apple 2
4344 Acer 2

去重

但我只想知道有哪幾家,我不需要知道哪些產品,有沒有什麼方法可以「去掉重複的名字」呢?
恩,答案就是 Distint

SELECT DISTINCT `supplier_name`, `order_status` FROM orders
WHERE `order_status` = 2;

結果

supplier_name order_status
Apple 2
HTC 2
Acer 2

那可以一次 Distinct 兩個欄位嗎?

好奇,所以試試看,把 where 拿掉

SELECT DISTINCT `supplier_name`, `order_status` FROM orders;

結果

supplier_name order_status
Apple 0
Apple 1
Apple 2
HTC 1
HTC 2
Acer 0
Acer 1
Acer 2

值得注意的是,Distinct 會做用到全不欄位,無法只作用在部分欄位!

# 即使加了括號,還是會作用到兩個欄位
SELECT (DISTINCT supplier_name), `order_status` FROM orders;

那有沒有其他方式可以針對一個欄位去重,但同時還是可以單純顯示其他欄位?這時候可以用 GROUP BY,或說一開始的情境用GROUP BY也可以!

SELECT `supplier_name`, `order_status` FROM orders
WHERE `order_status` = 2
GROUP BY `supplier_name`;

Reference


上一篇
SQL 的括號怎麼寫成 Laravel Query?
下一篇
資料庫:什麼是 unsigned integer
系列文
工作後才知道的後端 30 件小事20

尚未有邦友留言

立即登入留言