【问题标题】:Getting the lowest value with a subquery使用子查询获取最小值
【发布时间】:2016-07-09 17:34:21
【问题描述】:

这个查询也可以用子查询写吗?

我有什么:

SELECT name, lifeExpectancy from country
WHERE lifeExpectancy IS NOT NULL
ORDER BY lifeExpectancy ASC
LIMIT 1

结果应该是什么:

name     | lifeExpectancy
-------------------------
Zambia   |           37.2

【问题讨论】:

  • 这是作业还是测试题?它可以用一个连接子查询和一个MIN() 聚合来编写,但是你用LIMIT 订购lifeExpectancy 的查询可能更快。
  • 将作业、考试或面试问题带到这里时,请在问题中保持透明。如果您遇到困难,我们中的许多人很乐意为您提供帮助,因为有确凿的证据表明您正在尝试解决它,但社区不喜欢被视为回答服务。

标签: mysql subquery minimum


【解决方案1】:

当然:

SELECT name, lifeExpectancy from country
WHERE lifeExpectancy = (SELECT MIN(lifeExpectancy) FROM country)
LIMIT 1

您仍然需要LIMIT 1,以防有多个国家/地区共享最长寿命。如果已知 lifeExpectancy 是唯一的,至少在最大值上是唯一的,或者当第一名并列时您可以返回多行,您可以省略 LIMIT 1

SELECT name, lifeExpectancy from country
WHERE lifeExpectancy = (SELECT MIN(lifeExpectancy) FROM country)

【讨论】:

  • 这里变得很奇怪,这给了我:安道尔 - 83.5
【解决方案2】:

使用这个:

SELECT name, MIN(lifeExpectancy) AS lifeExpectancy from country;

【讨论】:

  • 年龄是正确的,但国家不是。这给了我 Aruba - 37.2
猜你喜欢
  • 2022-11-25
  • 2019-03-13
  • 2020-03-07
  • 2013-03-04
  • 2018-12-27
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多