Mysql 最小距离和分组方式

Mysql 最小距离和分组方式,mysql,sql,group-by,Mysql,Sql,Group By,我想问一下哪个商店离城市最近 我已创建此表(fac中的查询结果记录在临时表中) 我会得到这个结果(最小距离) 如何做到这一点?是MySQL官方文档中的一篇优秀文章: 引述: 包含某一列按组最大值的行 任务:针对每件商品,找到价格最贵的经销商 这个问题可以通过如下子查询解决: SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2

我想问一下哪个商店离城市最近

我已创建此表(fac中的查询结果记录在临时表中)

我会得到这个结果(最小距离)

如何做到这一点?

是MySQL官方文档中的一篇优秀文章:

引述:

包含某一列按组最大值的行 任务:针对每件商品,找到价格最贵的经销商

这个问题可以通过如下子查询解决:

SELECT article, dealer, price
FROM   shop s1
WHERE  price=(SELECT MAX(s2.price)
              FROM shop s2
              WHERE s1.article = s2.article);
前面的示例使用了相关子查询,这可能是低效的(请参阅第13.2.10.7节“相关子查询”)。解决此问题的其他可能性是在FROM子句中使用不相关的子查询或左连接

不相关子查询:

SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
  SELECT article, MAX(price) AS price
  FROM shop
  GROUP BY article) AS s2
  ON s1.article = s2.article AND s1.price = s2.price;
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;
左连接:

SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
  SELECT article, MAX(price) AS price
  FROM shop
  GROUP BY article) AS s2
  ON s1.article = s2.article AND s1.price = s2.price;
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;
选择s1.物品、s1.经销商、s1.价格
从s1店
在s1.article=s2.article和s1.price
左连接的工作原理是,当s1.price处于其最大值时,没有s2.price具有更大的值,并且s2行的值将为NULL。

是MySQL官方文档中的一篇优秀文章:

select t.id_Customer, t.id_Shop, t.distance 
from your_table t
inner join 
(
   select id_Customer, min(distance) as m_dis
   from your_table
   group by id_Customer
) x on x.id_Customer = t.id_Customer and t.distance = x.m_dis
引述:

包含某一列按组最大值的行 任务:针对每件商品,找到价格最贵的经销商

这个问题可以通过如下子查询解决:

SELECT article, dealer, price
FROM   shop s1
WHERE  price=(SELECT MAX(s2.price)
              FROM shop s2
              WHERE s1.article = s2.article);
前面的示例使用了相关子查询,这可能是低效的(请参阅第13.2.10.7节“相关子查询”)。解决此问题的其他可能性是在FROM子句中使用不相关的子查询或左连接

不相关子查询:

SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
  SELECT article, MAX(price) AS price
  FROM shop
  GROUP BY article) AS s2
  ON s1.article = s2.article AND s1.price = s2.price;
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;
左连接:

SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
  SELECT article, MAX(price) AS price
  FROM shop
  GROUP BY article) AS s2
  ON s1.article = s2.article AND s1.price = s2.price;
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;
选择s1.物品、s1.经销商、s1.价格
从s1店
在s1.article=s2.article和s1.price

左连接的工作原理是,当s1.price处于其最大值时,没有s2.price具有较大的值,并且s2行的值将为空。

请告诉我们您到目前为止尝试过的sql查询。这将帮助我们帮助您。请告诉我们您到目前为止尝试过的sql查询。这将有助于我们帮助您。就我个人而言,我从一个适合我的问题的示例中学到了更多,而不仅仅是一个普通的示例。我无法向您发送我的代码,但对于解决方案,我理解我的错误。我的子查询包含id\u Shop上的Group by和id\u Customer:D,所以。。。问题解决了。我的代码很复杂,因为我的问题简化了很多,但我的代码几乎与你的回答者(除了小组成员)的代码相同。我在一个适合我的问题的示例上学到了更多,而不仅仅是一般的示例。我无法向你发送我的代码,但对于解决方案,我理解我的错误。我的子查询包含id\u Shop上的Group by和id\u Customer:D,所以。。。问题解决了。我的代码很复杂,因为我的问题简化了很多,但我的代码与你的答案几乎相同(除了group by)
select t.id_Customer, t.id_Shop, t.distance 
from your_table t
inner join 
(
   select id_Customer, min(distance) as m_dis
   from your_table
   group by id_Customer
) x on x.id_Customer = t.id_Customer and t.distance = x.m_dis