简单分享个简单但之前不知道的 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`;
超强的 AI 作曲 在 2020 年的时候 NVIDIA 在 YT 上发表了这支影片,里头使用到的音...
这次解的题目是要计算当月每个星期几的平均工时,以及当月每一周的每日平均工时,详细的题目是从这篇文延伸...
上一篇已经学会如何把外部元件的资料传到内部元件,如果是内部传到外部,就需要透过emit来达成。 Pr...
还记得我们在 Day 14 的例子吗? 这是一个比较符合现实情境的 Input 元件状态,只有当 i...
清单设计 我们先将清单分成多个不同小块来设计,最後再将它们组起来 清单架构 <ul class...