我有一个在mysql中有大量行数的表(虽然我正在寻找通用的SQL解决方案)
very_big_table(INT a, INT b, INT c, ...)
Run Code Online (Sandbox Code Playgroud)
我想要SELECT语句
SELECT a,
(b + c) as expression1,
(b + c + a) AS expression2 -- basically (expression1 + a)
FROM very_big_table
WHERE ...
GROUP BY a
ORDER BY a DESC
Run Code Online (Sandbox Code Playgroud)
只要表达式1很简单,这看起来很好并且易于阅读.
但是当CASE-WHEN/IFNULL()/ SUM()/ MIN()/ STRCAT()或某些运算符在这些表达式中起作用时,它很难读取和调试.
我已经完成了一些已经问过的问题,
将mysql值分配给变量内联
使用另一列的列值(SQL Server)?
如何在同一个select语句中使用条件列值?
但是,如果我使用描述的方法
SELECT a,
expression1,
(expression1 + a) AS expression2
FROM
(SELECT a,
(b + c) AS expression1
FROM very_big_table
WHERE ...
GROUP BY a) as inner_table
ORDER BY a DESC
Run Code Online (Sandbox Code Playgroud)
这工作正常,但这个查询需要花费大约70倍的时间来执行.至少只有一次,我解雇了它. …