SQL获取最大值的记录:为什么不使用“ORDER BY”?

时间:2013-09-13 09:46:15

标签: sql max sql-order-by

我知道“对应于字段最大值的选择记录”已经详尽解答,但我想知道为什么没有人建议使用ORDER BY子句来获得正确的行。

例如,我有这张表:

| other_field | target_field |
| 1           | 15           |
| 2           | 25           |
| 3           | 20           |

我希望找到与最大other_field对应的target_field值(例如,在这种情况下,我想找到2)。

很多人建议使用GROUP和JOIN,但我的第一个想法是使用:

SELECT other_field FROM table ORDER by target_field DESC LIMIT 1;

这有什么问题吗?我能想到的唯一问题是,订购可能需要更长的时间,然后才能找到最大值(尽管另一方面,JOIN也可能需要一段时间)。

谢谢!

编辑:对不起回复的人,我是新来的,我希望收到一些通知的电子邮件:)

3 个答案:

答案 0 :(得分:1)

是。

它实际上必须在每条记录返回任何数据之前对其进行排序。这是非常低效的。它会返回你想要的东西,但不会以最好的方式返回。聚合函数往往更好,更快。

使用当前查询,一旦达到更高的数据负载,处理和实现将需要很长时间。 (使用较小的数据集,你应该没问题)

答案 1 :(得分:0)

  1. 如果您需要一个或多个表中的单个值,那么您必须选择Max和GroupBy

  2. 如果您只有一个表并且需要多个列,那么可以使用Order By Desc。

  3. 如果您再次需要单个表中的单个值,那么MAX也是首选。
  4. 我希望你得到我的观点

答案 2 :(得分:0)

您可以尝试使用以下查询:

select top 1 other_field from tester order by target_field desc;

在Sybase中运行良好。不确定其他数据库。