sdf*_*for 62 mysql sql mysql-error-1054
有没有办法在mysql语句中重用计算字段.我收到错误"unknown column total_sale":
SELECT
s.f1 + s.f2 as total_sale,
s.f1 / total_sale as f1_percent
FROM sales s
Run Code Online (Sandbox Code Playgroud)
或者我必须重复计算,如果我添加了我需要的所有计算,这将产生一个非常长的SQL语句.
SELECT
s.f1 + s.f2 as total_sale,
s.f1 / (s.f1 + s.f2) as f1_percent
FROM sales s
Run Code Online (Sandbox Code Playgroud)
当然我可以在我的php程序中完成所有计算.
rze*_*erg 77
是的,您可以重用变量.这是你如何做到的:
SELECT
@total_sale := s.f1 + s.f2 as total_sale,
s.f1 / @total_sale as f1_percent
FROM sales s
Run Code Online (Sandbox Code Playgroud)
在这里阅读更多相关信息:http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
[注意:此行为未定义.根据MySQL文档:]
作为一般规则,您不应该为用户变量赋值并在同一语句中读取值.您可能会得到您期望的结果,但这不能保证.
Rob*_*t D 48
以下似乎在我对MySQL 5.5的测试中运行良好:
SELECT
s.f1 + s.f2 as total_sale,
s.f1 / (SELECT total_sale) as f1_percent
FROM sales s
Run Code Online (Sandbox Code Playgroud)
OMG*_*ies 13
只有跨平台支持的方法是使用派生表/内联视图:
SELECT x.total_sale,
x.f1 / x.total_sale as f1_percent
FROM (SELECT s.f1,
s.f1 + s.f2 as total_sale,
FROM sales s) x
Run Code Online (Sandbox Code Playgroud)
您可以使用子选择:
select tbl1.total_sale,
tbl1.f1/tbl1.total_sale as f1_percent
from (select s.f1+s.f2 AS total_sale,
s.f1
from sales s) as tbl1;
Run Code Online (Sandbox Code Playgroud)
您可以使用子查询,如下所示:
SELECT
h.total_sale,
s.f1 / h.total_sale AS f1_percent
FROM sales s,
(SELECT id, f1 + f2 AS total_sale FROM sales) h
WHERE
s.id = h.id
Run Code Online (Sandbox Code Playgroud)
编辑:
固定笛卡尔积,假设主键是id.
这应该相当于优化后的OMG Ponies的解决方案,但我认为如果您需要更多子查询,它会变得更难阅读。
| 归档时间: |
|
| 查看次数: |
39483 次 |
| 最近记录: |