首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨多个字段查询并返回集合的最小值

跨多个字段查询并返回集合的最小值
EN

Stack Overflow用户
提问于 2018-02-20 05:23:56
回答 2查看 20关注 0票数 0

我有个情结(至少对我来说是这样!)我一直试图解决的SQL问题。

我桌子的结构是:

代码语言:javascript
复制
Query: describe shipping_zones
+------------+--------+---------+
| name       | type   | comment |
+------------+--------+---------+
| key_id     | int    |         |
| carrier    | string |         |
| origin_zip | int    |         |
| dest_zip   | int    |         |
| zone       | int    |         |
+------------+--------+---------+

有三种类型的“承运人”

代码语言:javascript
复制
Query: select DISTINCT(carrier) FROM shipping_zones
+---------+
| carrier |
+---------+
| fedex   |
| ups     |
| usps    |
+---------+
Fetched 3 row(s) in 0.42s

我有一个查询,它为每个运营商返回两个区域:

代码语言:javascript
复制
SELECT carrier, zone
FROM shipping_zones
WHERE (origin_zip = 402 OR origin_zip = 950) AND dest_zip = 978;

+---------+------+
| carrier | zone |
+---------+------+
| ups     | 4    |
| ups     | 7    |
| fedex   | 7    |
| fedex   | 4    |
| usps    | 8    |
| usps    | 4    |
+---------+------+

问题是我只想从每个运营商返回最低的号码,而不是两者都返回。我可以使用Min()吗?或者有更好的方法吗?

谢谢您的帮助,我非常感谢您对SQL的理解!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-20 05:28:12

听起来你在找聚合函数。但是,无论何时使用聚合函数,都必须告诉数据库引擎如何单独处理所有字段。如果您有一个文本字段,只要有重复,就可以使用group by子句。

代码语言:javascript
复制
SELECT carrier, min(zone)
FROM shipping_zones
WHERE (origin_zip = 402 OR origin_zip = 950) AND dest_zip = 978
group by carrier;
票数 1
EN

Stack Overflow用户

发布于 2018-02-20 05:27:28

是的,在按载波分组之后,您可以在每个载波上使用Min()函数。分组本质上将根据应用的函数(在本例中为“承运人”)“汇总”要分组的列(本例中为“Min”):

代码语言:javascript
复制
SELECT carrier, MIN(zone) as min_zone
FROM shipping_zones
WHERE (origin_zip = 402 OR origin_zip = 950) 
AND dest_zip = 978
GROUP BY carrier
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48878386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档