我在 mysql 中有一个包含大量行数的表(尽管我正在寻找通用 SQL 解决方案)
very_big_table(INT a, INT b, INT c, ...)
我想要 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
只要表达式 1 简单,这看起来不错且易于阅读。
但是当 CASE-WHEN/IFNULL()/SUM()/MIN()/STRCAT() 或某些运算符在这些表达式中发挥作用时,它很难阅读和调试。
我已经解决了一些已经提出的问题,
将 mysql 值分配给变量内联
使用列的值用于另一列(SQL Server)?
如何在同一选择语句中使用条件列值?
但是,如果我使用描述的方法,例如
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
这很好用,但是这个查询需要 70 倍以上的时间来执行。至少当我解雇它时,虽然只有一次。
如果我在输出列中 有多个级别的表达式怎么办?
有什么优雅的方法来处理这个问题,而不影响可读性?
顺便说一句,为什么SQL 标准或供应商不支持 select 语句中的这个表达式重用或别名引用?(假设在单个 SELECT 语句表达式中没有循环评估。在这种情况下,编译器会失败)