繁体   English   中英

我们可以进一步简化这个MySQL查询吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM