如果我想为特定列选择具有最大值的行,我可以简单地这样做
SELECT * FROM tablename WHERE columnname=(SELECT MAX(columnname) FROM tablename)
我的问题是双重的。首先,如果这个值不是列而是对行进行操作的存储过程的结果,那么语法是什么?就像是
SELECT * FROM tablename
WHERE CALL procname (???)
= (SELECT MAX (CALL procname (???) FROM tablename)
我如何充实这个查询?
其次,在这种简单的形式中,我们procname
对每一行调用一次来确定MAX(...)
,然后可能在每一行上再次调用一次来测试每一行是否具有最大值。
我该如何优化呢?我猜它可能与临时表有关,但我不知道引擎有多聪明,我在心理上将它与只需要维护的 C 风格 for 循环的性能进行比较一次一行的值。