SQL替代方案

SQL替代方案,sql,case,Sql,Case,有没有更好的方法来处理这个SQL 有时我的收入=0在某些情况下,我需要每月收入除以特定月份的非零收入 SELECT "CLASS", "SCHOOL", "Year", "MONTH", Sum("JanIncome")/Sum( CASE WHEN "JanIncome">0 THEN 1 ELSE NULL

有没有更好的方法来处理这个SQL

有时我的收入=0在某些情况下,我需要每月收入除以特定月份的非零收入

SELECT   "CLASS",
         "SCHOOL",
         "Year",
         "MONTH",
         Sum("JanIncome")/Sum(
         CASE
                  WHEN "JanIncome">0 THEN 1
                  ELSE NULL
         END) AS "JanAvg"
         Sum("FebIncome")/Sum(
         CASE
                  WHEN "FebIncome">0 THEN 1
                  ELSE NULL
         END) AS "FebAvg"
FROM     (
                SELECT *
                FROM   school )
GROUP BY "CLASS",
         "SCHOOL",
         "Year",
         "MONTH"; 

将0置零并使用内置的平均值如何:


忽略空值。

from Select*from School可以是just from School您想使用一个月内的所有天数,例如1月31日,还是只使用非零值的平均值?仅使用非零值的平均值数据,请回答一个后续问题,假设我有3个值为7、0、2的记录,在本例中为AVGNULLIFJanIncome,0为JanAvg,结果是9/2=4.5或9/3=3..@Ram-4.5。如果您没有这方面的经验,那么在您的机器上设置一个数据库服务器,熟悉临时表或表变量,或者使用-在获得这些问题的答案所需的时间内,您可以自己尝试一下,看看它是如何工作的。
SELECT "CLASS","SCHOOL","Year","MONTH",
  AVG(NULLIF("JanIncome",0)) AS "JanAvg",
  AVG(NULLIF("FebIncome",0)) as "FebAvg"