【问题标题】:SQL Query With Calculated MIN, Requesting Other Column Returns All Rows计算出的 MIN 的 SQL 查询,请求其他列返回所有行
【发布时间】:2012-05-27 01:24:27
【问题描述】:

我们有查询:

SELECT ID, MIN(SQRT(POW((100-x),2)) + POW((150-y),2)) AS distance 
FROM cabstands 
GROUP BY ID

查找坐标系中离点100、150最近的点的ID。如果我不请求 ID 并尝试仅获取距离,则查询将返回真值。但是,如果我请求 ID(如上面的查询),它会返回所有点,因为 GROUP BY。如果我不放 GROUP BY,它根本不允许我通过以下方式执行查询:

ID 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

我的问题的解决方案是什么。提前致谢。

【问题讨论】:

  • 为什么不使用SELECT TOP 1 ... ORDER BY distance ASC
  • 请用您正在使用的 DBMS 标记您的问题。这是 MySQL 还是 PostgreSQL?
  • 感谢您的回复,我很确定它会以这种方式工作。我会让你知道。我已经标记了我的 DBMS,我正在使用管理工具运行 Microsoft SQL Server 2008。

标签: sql sql-server-2008 group-by latitude-longitude min


【解决方案1】:

你可以使用:

SELECT TOP 1 ID, MIN(SQRT(POW((100-x),2)) + POW((150-y),2)) AS distance FROM cabstands GROUP BY ID ORDER BY distance ASC

或者对于 MySQL:

SELECT ID, MIN(SQRT(POW((100-x),2)) + POW((150-y),2)) AS distance FROM cabstands GROUP BY ID ORDER BY distance ASC LIMIT 1

【讨论】:

  • 非常感谢,我会在尝试您的解决方案后立即接受您的回答,我很确定它会起作用:)
猜你喜欢
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 2019-04-16
  • 2022-11-17
  • 1970-01-01
  • 2019-04-17
  • 2019-03-29
相关资源
最近更新 更多