0

我知道“选择与字段最大值相对应的记录”已被详尽回答,但我想知道为什么没有人建议使用 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 也可能需要一段时间)。

谢谢!

编辑:抱歉,回复晚了,我是新来的,我期待收到一些电子邮件通知:)

4

3 回答 3

1

是的。

它实际上必须对每条记录进行排序,然后才能返回任何数据。这是非常低效的。它会返回你想要的,但不是以最好的方式。聚合函数往往做得更好,更快。

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

于 2013-09-13T09:50:48.137 回答
0
  1. 如果您需要一个或多个表中的单个值,那么您必须选择 Max 和 GroupBy

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

  3. 如果您再次需要单个表中的单个值,那么这里也首选 MAX。

我希望你能得到我的分数

于 2013-09-13T09:50:19.117 回答
0

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

select top 1 other_field from tester order by target_field desc;

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

于 2013-09-13T09:56:08.977 回答