[英]Can we further simplify this MySQL query?
我在MySQL中有一个具有以下字段的表。 日期,block_no,实体,阅读
现在,我启动此SQL并获取结果。
SELECT DATE,block_no,
SUM(IF(entity='KS',READING,0)) AS KS,
SUM(IF(entity='KB',READING,0)) AS KB,
SUM(IF(entity='V1',READING,0)) AS V1,
(SUM(IF(entity='KS',READING,0)) + SUM(IF(entity='KB',READING,0)))/SUM(IF(entity='V1',READING,0)) AS "New Rate"
FROM dbf_sdl
GROUP BY DATE,block_no;
这是一个包含三个实体和计算字段的简单查询,但是我必须编写涉及多达15个实体和使用它们的一些计算字段的查询。 有没有一种方法可以进一步简化这些查询? 字段别名不允许用于计算,例如我不能使用
(KS+KB)/V1 AS "New Rate"
请提示。 谢谢
列别名不可在同一SELECT语句中使用,但是如果您不想重写计算,则可以使用子查询:
select DATE,block_no, KS, KB, V1,
(KS+KB)/V1 AS "New Rate"
from
(
SELECT DATE,block_no,
SUM(IF(entity='KS',READING,0)) AS KS,
SUM(IF(entity='KB',READING,0)) AS KB,
SUM(IF(entity='V1',READING,0)) AS V1
FROM dbf_sdl
GROUP BY DATE,block_no
) d
您可以在子查询中进行聚合以避免重复SUM():
SELECT *,(KS+KB)/V1 AS "New Rate"
FROM (SELECT DATE,block_no,
SUM(IF(entity='KS',READING,0)) AS KS,
SUM(IF(entity='KB',READING,0)) AS KB,
SUM(IF(entity='V1',READING,0)) AS V1,
FROM dbf_sdl
GROUP BY DATE,block_no
)as Sub;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.