我有个情结(至少对我来说是这样!)我一直试图解决的SQL问题。
我桌子的结构是:
Query: describe shipping_zones
+------------+--------+---------+
| name | type | comment |
+------------+--------+---------+
| key_id | int | |
| carrier | string | |
| origin_zip | int | |
| dest_zip | int | |
| zone | int | |
+------------+--------+---------+有三种类型的“承运人”
Query: select DISTINCT(carrier) FROM shipping_zones
+---------+
| carrier |
+---------+
| fedex |
| ups |
| usps |
+---------+
Fetched 3 row(s) in 0.42s我有一个查询,它为每个运营商返回两个区域:
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的理解!
发布于 2018-02-20 05:28:12
听起来你在找聚合函数。但是,无论何时使用聚合函数,都必须告诉数据库引擎如何单独处理所有字段。如果您有一个文本字段,只要有重复,就可以使用group by子句。
SELECT carrier, min(zone)
FROM shipping_zones
WHERE (origin_zip = 402 OR origin_zip = 950) AND dest_zip = 978
group by carrier;发布于 2018-02-20 05:27:28
是的,在按载波分组之后,您可以在每个载波上使用Min()函数。分组本质上将根据应用的函数(在本例中为“承运人”)“汇总”要分组的列(本例中为“Min”):
SELECT carrier, MIN(zone) as min_zone
FROM shipping_zones
WHERE (origin_zip = 402 OR origin_zip = 950)
AND dest_zip = 978
GROUP BY carrierhttps://stackoverflow.com/questions/48878386
复制相似问题