簡單分享個簡單但之前不知道的 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 |
好奇,所以試試看,把 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`;