如何用 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


<<:  云端定义 2

>>:  MVC架构

【Day29】漫谈 AI 在音乐上其他的优秀作品

超强的 AI 作曲 在 2020 年的时候 NVIDIA 在 YT 上发表了这支影片,里头使用到的音...

[资料库] 学习笔记 - 时间函数 和 群组

这次解的题目是要计算当月每个星期几的平均工时,以及当月每一周的每日平均工时,详细的题目是从这篇文延伸...

Vue.js 从零开始:emit 元件的沟通

上一篇已经学会如何把外部元件的资料传到内部元件,如果是内部传到外部,就需要透过emit来达成。 Pr...

Day24 - 在 XState 中的阶层式状态 Hierarchical States

还记得我们在 Day 14 的例子吗? 这是一个比较符合现实情境的 Input 元件状态,只有当 i...

【Side Project】 订单清单 - 画面设计2

清单设计 我们先将清单分成多个不同小块来设计,最後再将它们组起来 清单架构 <ul class...