2013-06-18 63 views
0

我在MySQL中有一个表格,其中包含以下字段。 日期,block_no,实体,读取我们可以进一步简化这个MySQL查询吗?

现在我发射这个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" 

请建议。 感谢

回答

7

列别名不可用于在同一个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 
2

你可以在一个子查询汇总以避免重复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; 
+0

谢谢....真的帮助... –